做题中的错误总结

马上NOIP2018啦,突然发现自己比去年还菜,写水题时出现了很多错误,记录一下。

2018.7.8

luoguP2016 战略游戏

节点从0编号。

所以以i为根时不能设i的根为0,应设为-1

 for(int i=0;i<n;i++)
        dp(i,-1),ans=min(ans,min(f[i][0],f[i][1]));

2018.7.9

 luoguP1171 售货员的难题

开始时开数组过大导致MLE,改小后90分,TLE一点,被卡常了QWQ

2018.7.10

luoguP1154 奶牛分厩

本来想切一切水题的,结果还WA了

不过还想是前面想复杂了QwQ

2018.7.16

luoguP1922 女仆咖啡厅桌游吧

树形DP,开始状态转移方程推错了

2018.7.21

luoguP2422 良好的感觉

没开longlong见祖宗

luoguP2627 修剪草坪

前面一直没有想好单调队列的入队和出队的条件,还是思维太差。

luoguP3146 [USACO16OPEN]248

状态转移的顺序+边界条件没有想清楚

2018.7.22

NOIP2013 车站分级

一次AC,然而调试了很久。读题+思路的问题:一辆车没经过的车站在起始站与终点站之间

NOIP2009 最优贸易

一次AC,然而还是调试了很久,主要是反向建边时和正向的用的一个head数组。

NOIP2013 转圈游戏

把快速幂写成这样,然后还过样例了??!

inline ll qpow(int a,int b)
{
    ll ans=1,mul=a;
    while(b)
    {
        if(b&1) ans*=mul,ans%=n;
        mul*mul,mul%=n;
        b>>=1;
    }
    return ans%n;    
}

2018.7.23

NOIP2013 火柴排队

忘取模了都有80分qwq

NOIP2014 寻找道路

BFS+SPFA

坑题:我们一开始反向bfs,把终点能走的点记录到一个vis数组里;

然后遍历一遍不和终点连接的点,把vis数组置为false。

把vis数组置为false之前一定要备份一份vis数组

如果一个点一开始被标记,它通过一个不和终点连接的点删除了,那么有可能过一会被当作一开始就没有标记的点!

CF19A World Football Cup

模拟。本身就不擅长这种题,错误如下:

1.题意有问题

2.对于字符串操作不熟

2018.7.24

NOIP2010 关押罪犯

数组开小

CF1009B Minimum Ternary String

多次调用strlen函数导致TLE,拿一个变量记录lena就行了

[USACO16Jan]建门 gates

有一些细节没有讨论好

2018.7.25

[JLOI2014]松鼠的新家

线段树空间开4倍,add数组开4倍

[NOI2015]软件包管理器

update的时候写下了这样的代码:

inline void update(int o,int x,int y,int z)
{
    int l=tree[o].l,r=tree[o].r;
    if(x<=l&&y>=r)
    {
        add[o]=z;
        tree[o].sum=(tree[o].r-tree[o].l+1)*add[o];
        return;
    }
    else
    {
        if(add[o]!=-1) pushdown(add[o]);
        if(x>r||y<l) return;
        update(lc,x,y,z);
        update(rc,x,y,z);
        tree[o].sum=tree[lc].sum+tree[rc].sum; 
    }
}

luoguP3384 【模板】树链剖分

dfs2的时候写下了dfs2(root,1)的神奇代码。

正确的是dfs2(root,root)

P3387 【模板】缩点

数组开小

2018.7.26

luoguP1529 回家

SPFA写错,少写了inq[u]=0

inline void spfa()
{
    for(int i=1;i<=200;i++) dis[i]=1<<30;
    queue<int>q;
    dis['Z']=0;
    q.push('Z');
    inq['Z']=1;
    while(q.size())
    {
        int u=q.front();
        q.pop();
        inq[u]=0;
for(int i=head[u];i;i=g[i].next)
        {
            int v=g[i].to;
            if(dis[v]>dis[u]+g[i].val)
            {
                dis[v]=dis[u]+g[i].val;
                if(!inq[v])
                {
                    q.push(v);
                    inq[v]=1;
                }
            }
        }
    }
}

 2019 初三升高一 暑假

[NOI2004] 郁闷的出纳员

不会输入字符串了

记得刚开始加入一个INF节点防止树空了

暴力修改

[HNOI2010]弹飞绵羊

不要把变量搞混

 

posted @ 2018-07-26 13:04  wlzs1432  阅读(314)  评论(4编辑  收藏  举报