错贴本

字符串

  1. 哈希进制搞质数

  2. KMP 数组别开太大,否则 \({\color{Gold}{TLE}}\)

  3. 没有必要 \(strlen\) 的时候尽量别用

  4. \(base\) 过大跑的慢

\(SPFA\)(2021/1/31)

  1. return 0 别放循环里面

  2. 边表是注意数据类型特别是 double!!!

  3. 循环里尽量不要设变量去代替边表,类型会出错

  4. 多用scanf 少用cin

  5. 多组数据 边表 head 别忘清零

二分

  1. 实数二分别 +1

  2. 有关 doubleint 的错误

  cout<<a<<endl;
  printf("%.f\n",a);
  int s=(int)a;
  cout<<s;

三者是完全不同的,第一个是按照double随机小数位输出,第二个是四舍五入输出答案容易出错,第三个是强制类型转换,直接输出整数部分,建议最好用这个,cao,又废了我一下午2/17

差分约束(2021/2/1)

  1. 个人感觉跑最短路好些

  2. >0 就为1, >=0 为0

  3. \(SPFA\) 时,判断是否联通尽量将边界开大些 例如 1e8, 最短路如果不连通会跑无数次 inf.

\(tarjan\)(强连通分量)

  1. void 类型 \(tarjan\), 别定义错了

  2. 一晚上的血教训,不要用边表了,用 \(vector\) 吧!!!!!!!!,TMD卡了四个题,全是 \(TLE\).


  3. if(d[i] == 1) != if(d[i]) 前者只有一, 后者不是零的都记录,哎~又是一晚上----2/3

\(tarjan\) (桥和割点)

  1. 根节点要求孩子多于两个才可,非不为就行!!! if(child >= 2 && u == fa) cut[u] = 1;//child >= 2!!! 不是 != 0

  2. 根节点和非根节点的处理要注意

if(low[v] >= dfn[u] && u != fa) cut[u] = 1;// 保证不是根节点 
      if(fa == u) child++;// u == fa 才记录孩子 

DP

  1. 无输出:循环节 j-- 写成 j++ P1049 [NOIP2001 普及组] 装箱问题

  2. 背包DP,\(n\)\(m\) 不要搞反了

  3. 状态有时并非需要精确表示,如果可以通过某种方式简化位置,但却可以在使用时正确表示位置的话,那么这种答案会更优,这也就是精简式子

  4. 注/ 式子的化简可以通过化简来的得到,如这里的代换就是令 \(k\)\(j-k\) 只要范围不变,他们就是等价的,原因是便于式子的化简!(式子的优美)

  5. 状压DP位运算错误

//cin
1<<3-1
(1<<3)-1
//cout
4
7
//so
//左移小于负号

KSM

  1. x*=x%k 无法完成必须拆开 x*=x; x%=k,写错挂七个点

邻接表

  1. 邻接表开小居然是MLE??-->这个题

数组的大小

  1. 开的数据范围不要太大--这个题

2.数据范围不要开小了,f开小了

有关 \(memset\) 的赋值

1.memset(a,x,sizeof(a) 中赋值只取 \(x\) 的后四位,也就是说 0x7fffffff 赋值就是 ffff,也就是 -1,这样你的费用流就更加优美了

专场错误

  1. 图论专场
posted @ 2021-01-17 16:50  zxsoul  阅读(133)  评论(13编辑  收藏  举报