代码品质

细节决定成败,每一次都因为这些与优秀擦肩而过
让每一份代码都成为无需修改的精品,是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的情况没有初始化

  


posted @ 2018-06-19 17:43  Captain_fcj  阅读(295)  评论(0编辑  收藏  举报