【置顶】思路,错误和好题记录

2018-02-18 18:42:33


错误:
二维压一维中x*m+y-1中x乘的是m不是n(如果n行m列)

c++里sort函数是左闭右开区间,其他有关区间的函数似乎都是,这样的一个好处是右减左等于区间长度

二维压一维的表达式是x*n+y-1而不是x*n+y,取y的时候是d%n+1,注意取模操作的值域是0~(n-1)

bfs初始进队的时候注意给标记数组标上

当你打算在函数结束的时候做点什么,注意函数是否只有一个结束点:

void dfs(int x,int y){
    //flg[x][y]=true;  WrongAnswer!!!
    if(x==tx && y==ty){
        ++ans;
        return ;
    }
    flg[x][y]=true;

快速幂求$ 1^0 mod 1$,直接写的快速幂会WA
因为当指数是0的时候函数直接退出了,没有任何一步会对膜数取模
所以如果膜数可能为1注意特判

线段树区间增求区间和,不仅要在pushdown的时候v+=v(md-l+1)还要在l==l && r==r的时候v+=v(r-l+1)!!!

dinic中s的lvl不能和每个点dfs完后如果此点流量为0设置的lvl相同,否则会变得巨慢(如lvl[s]=0然后if(!bwl)lvl[x]=0

高精度比大小写成这样:

if(lth[x]>lth[y])  return true;
for(int i=0;i<lth[x];++i)if(s[x][i]>s[y][i])  return true;

居然能连错两处我也是醉了

注意如果在一道题中数值0是有意义的,一定要注意相关的情况,例如初始的值等(【洛谷1156】
如果数据中可能出现重复的,尤其是涉及到排序相关,造数据注意考虑这种情况(2018十省联考第一天第二题

如果使用队列,注意队列是否是有头有位 比如单调队列有队尾tail的时候,队头head自减的界限就是head<tail而不是head<=0

phi[1]=1!!!

二分时关于左右边界分配的问题,主要是如果数列中有重复的
注意如果有重复的!
这种的会输出最后一个

while(l+1<r)  md=(l+r)>>1,(a[md]<=x ? l : r)=md;

这种的是第一个

while(l+1<r)  md=(l+r)>>1,(a[md]<x ? l : r)=md;

离散遇到区间问题极有可能需要插入中间点!
因为很可能碰到两个区间中间有个缝,里边明明藏了一个区间但是离散后扫不到的情况
插入中间点不必+0.5,也可以*2


技巧:
洛谷博客编辑的时候有时候不能直接在文章最后进行编辑而是卡在倒数第二段的位置,这个时候在倒数第二段随便输入一个字符即调到文末,然后一切正常

使用迭代的方式写gcd:

while(b) c=a,a=b,b=c%b;

好像可以优化常数,还可以防止爆栈(虽然会把gcd爆掉的题好像不存在就是了= =

统计单词数一题中,给一个文章,每个单词之间用空格隔开,让你统计某个单词出现了多少次,可以把指定的单词和文章两段都加上一个空格,这样就可以巧妙地避免空格讨论问题,直接匹配即可


好题:
SCOI2005最大子矩阵:思路不难,但是细节较容易出错