zoukankan      html  css  js  c++  java
  • BUG全集(我遇到的)

    BUG全集

    写给自己看的 每次代码容易出问题,有的时候还是重复的,想写很久了 这次来更,为了以后写题少一些bug,多一些时间想正解!

    1. dfs
      首先dfs不要写傻了 有一道题比方说要选n个步骤 每个步骤有3种 是对一个数列进行不同的修改,这时候一边选步骤,一边修改,是比选完n个步骤再一次性修改要快的。

      其次,如果每次要带一个参数的话,设为p,如果在void dfs里做出了 s=p,s....
      dfs(s)的情况,s必须开在void里,开在全局变量会导致出错

      参数不要带错了,回溯的话记得清数组和变量

      有多个dfs的时候,不要写错dfs的名字了,记得区分

    2、bfs
    bfs似乎没什么 q.front()之后记得及时pop

    3、线段树
    build,update,query之后记得pushup,单点修改,区间修改,询问的时候记得pushdown
    如果是树上维护最大子段和之类 记得考虑要不要反过来
    树剖的时候不要update错了 记得脑补一下LCA的板子和跳链的情景

    4、splay
    $$Splay·一生之敌$$
    草每次splay的题都要写/调一天 好烦的啊啊啊啊啊

    inline int kth(int rt,int k){
    int x=rt;
    while (1){
    	//printf("x=%d rc=%d
    ",x,rc);
    	if (siz[lc]>=k) x=lc;
    		else if (siz[lc]+1<k) k-=siz[lc]+1,x=rc;
    			else break;
    }
    splay(x);
    return x;
    

    }

    注意k-=siz[lc]+1这里 必须k先减掉 x再=rc 不然直接gg了
    rotate和splay的东西记得不要写错/笔误 不然很难查

    5、二分
    合法的时候用ans=mid记一下
    cmp的时候一定要用到mid 一般是把mid当做条件 看原问题条件是否得到满足
    不要把l=mid+1 ,r=mid-1这两种情况写反了

    6、数组及时清0 变量也是 初始化很重要

    [PS::数组不要开太大 不然memset很卡 ]

    7、注意(longlong)!!!!!!!

    8、反演的时候推式子要注意 不要瞎几把推 注意卷积

    9、线筛的时候初值 一般积性函数(f(1)=1)都是成立的

    10、(i,j)这个不要写错。。。

    (8.12update)

    1.多组询问的时候 对于字母的读入千万千万千万不要用(getchar)
    这玩意卡了我整整3天 气死我了,问题是本机用getchar还能拍过去 交上去就完蛋
    2、splay只是工具 要灵活使用 记得考虑性质

    (9.24update)

    1、(Trie),线段树,(splay)(query)写完之后千万千万记得要(return)返回值,以及主席树的build和(insert),一定要写成$$T[i]=build/insert$$不然会很惨啊啊啊啊啊
    2、队列用完记得清空啊,还有就是q.front(),q.top()之后一定一定要立刻地q.pop(),上次写异或粽子居然把这个忘了然后调了半小时
    3、对于可持久化01Trie,记录历史版本的时候即使这是最后一位也要接着传信息$$,L[root]=L[pre];R[root]=R[pre];ch[root]..$$
    换句话说,如果用递归(dfs(int pre,int bits,int x))表示上一个版本是pre,bits表示位数,要在bits=-1的时候再直接返回root跳出去,在bits=0的时候依然要传递信息。
    算了怕自己忘把代码贴上来

    int insert(int pre,int Bits,int x){
    	if (Bits<0){
    		int root=++tot;
    		sum[root]=sum[pre]+1;
    		return root;
    	}
    	int root=++tot;
    	sum[root]=sum[pre]+1;
    	int d=(bool) (x&(bin[Bits]));
    	ch[root][d^1]=ch[pre][d^1];
    	ch[root][d]=insert(ch[pre][d],Bits-1,x);
    	return root;
    }
    

    然后干脆或者就不写递归版的,可以写非递归的

    int insert(int pre,int x){
    	int now,root;now=root=++tot;
    	res(i,23,0){
    		ch[now][0]=ch[pre][0];ch[now][1]=ch[pre][1];
    		sum[now]=sum[pre]+1;
    		int d=(bool)(x&bin[i]);
    		pre=ch[pre][d];
    		ch[now][d]=++tot;
    		now=ch[now][d];
    	}
    	sum[now]=sum[pre]+1;
    	return root;
    }
  • 相关阅读:
    牛逼的博客地址
    动画的keyPath
    跳转到系统设置的各种配置
    UITextField只允许输入正数
    冒泡排序
    number类型的数组
    正则表达式
    C中常用的数学函数
    利用运行时,查看一个类的所有子类
    玉蟾宫(悬线法)
  • 原文地址:https://www.cnblogs.com/ugly-CYW-lyr-ddd/p/11337267.html
Copyright © 2011-2022 走看看