代码品质
细节决定成败,每一次都因为这些与优秀擦肩而过
让每一份代码都成为无需修改的精品,是OIer应该具有的品质
1、注意输出字符串的大小写,复制复制!!!
2、注意该输出什么(不为0的,不为负的...)
现场:输出且仅输出所有能被看到的颜色(100==>20)
3、排序时注意有几个数
//sort(a+1,a+n+1,cmp); sort(a+1,a+n+2,cmp);
4、数据结构题的下标意义
inline int newnode(int x) { val[++tot]=x; si[tot]=1; pri[tot]=rand();//tot==>x return tot; }
5、斜率优化时的精度
inline double SL(int i,int j)//double==>int { return (double)(Y(i)-Y(j))/(X(i)-X(j)); }
6、工具数组的初始化要从0开始
for(int i=0;i<=3000;i++) b[i]=rand()%mod; //Hash的随机数组,没有初始化b[0]
7、线段树四倍四倍四倍空间!
const int maxn=1e5+10; int n,Q; int mx[maxn*4],mn[maxn*4],a[maxn*4];//maxn*4==>maxn
8、空间要依照题意严格设置!!
const int maxn=22; const int maxm=1e3+10;//1e3==>1e5 //此处省略若干大小为maxm的数组 struct TMP { int now,mxx; int aa[maxn][maxn]; }op[maxm]; //即使空间512MB也不能任性想开多大就开多大
9、线段树的push_down()里面:
tag[p<<1]+=tag[p],tag[p<<1|1]+=tag[p]; //tag[p<<1]=tag[p<<1|1]=tag[p];
10、树链剖分的$dfn$编号一定要在$dfs2$中
11、矩阵快速幂的时候,尽量少模
for(int i=1;i<=2;i++) for(int j=1;j<=2;j++) { for(int pp=1;pp<=2;pp++) c.a[i][j]=(c.a[i][j]+(a[i][pp]*bb.a[pp][j])%p);//这里不要再模了 if(c.a[i][j]>p) c.a[i][j]-=p; //这样模一下就行了 }
12、预处理逆元的时候,千万记得$inv[0]=inv[1]=1$
inv[1]=inv[0]=1;//! for(int i=2;i<=8001;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod; //否则这里会出现mod%i==0的情况没有初始化