以后应该注意的东西

来源:互联网 发布:反美颜软件 编辑:程序博客网 时间:2024/05/01 16:02

收集各种比赛是应该注意的东西。不断更新中……

细节

  1. 在要运用取模操作的题目,取模操作要打少一点,mod的好慢啊!
  2. 有把握的题不要先打对拍,否则可能时间不够。
  3. 博弈最好还是用dfs来求解。
  4. long long取模的还是用黑科技1。
  5. 表面上不会爆long long,如果带有符号运算的,就要考虑一下。
  6. 注意long long爆空间。
  7. 当有-1次方的时候,就求一下逆元。
  8. 如果是struct套struct注意要重载运算符。
  9. 网络流的东西不必要考虑那么深,易证,易证……..
  10. 位运算的优先级非常的低,注意打括号。
  11. 开long long还是不要用define,用typedef,否则会发生灵异事件。
  12. 打线段树查询范围y到z时,z可能小于y,所以要特判。
  13. 如果memset一个bz数组会爆的话,那么我们向打网络流的标记一样,用int数组标记。
  14. 离散化有时看上去不能省很多空间,实际上不用可能会空间爆炸。
  15. 有一些意想不到的数组都可能会爆掉,比如说邻接表……
  16. 对某道题打出来的所有方法分析好时间复杂度,对好拍。
  17. c++打循环的时候如果fo(i,a,b)b=2147483647的话,c++会先加再判断,然后这种情况下开int就会爆炸。
  18. 二分的时候要注意,如果是负数的二分那么mid=(l+r+1)/2,然后还要注意到底是该l=mid+1还是r=mid-1;还要把判断的是<还是≤判断好。
  19. 有很多复杂但是类似的操作,可以想一个简单一点的方法融合起来省省代码量。
  20. c++打函数的时候,一定要打retrun。
  21. 序列翻转时,lda(连着左端点的最大和子段)和rda(连着右端点的最大和子段)要互换。
  22. 打单调队列时l=1,r=0。
  23. 斜率优化是用交叉相乘判断,因为除数可能为零,所以判断符号不是”≤”就是”≥”。
  24. 斜率优化中如果得出的式子是小于符号,那么就是斜率越大越优,反之也是。
  25. 打lct的旋转时注意要更新pfa。
  26. splay开0节点时,注意左右儿子可能没有然后返回0.
  27. 分解质因数是注意i==n/i的情况。
  28. 注意筛phi和筛miu的时候当i%p[j]==0的时候,就break不要continue,因为break就可以保证每个合数只出现一次。
  29. 树状数组维护逆序对的时候,get(a[i])表示小于等于a[i]的数的个数。
  30. 在dfs上标记的时候,如果是bz[last[i]]=1就不要走,如果走过去再判断会变慢。
  31. 树状数组的右边界不能开太大,否则可能会超时。
  32. 把n个点拆成m个点,编号的时候不能i * j,要(i-1) * m+j,因为1 * 2= 2 * 1。
  33. c++里面的c换成.h,会快非常多。

思路

  1. 对于一道二分不能做又想二分的题目,想想优先级(就是排序)。【NOIP2012提高组】国王游戏

  2. 题目只给了一个式子的题目就把式子化简或展开,把它分解成能做的。【WinterCamp 2013】模积和

  3. 对于n/i这种东西,要想到分块。【莫比乌斯反演的大多数题,例:【2011集训队出题】Crash的数字表格
  4. 看到gcd(i,j)就要想到直接枚举最大公约数d,及gcd(i,j)=d。然后就想到f(d)是gcd(i,j)=d的个数,然后还能想到g(d)=gcd(i,j)是d的倍数的个数,然后就能想到莫比乌斯反演。【莫比乌斯反演的大多数题,例:【2011集训队出题】Crash的数字表格
  5. 处理一段区间的一个值并返回坐标,那么就可以打权值线段树。【NOIP2012提高组】开车旅行
  6. 有lcm或这是gcd的题目,首先想到莫比乌斯繁衍。【莫比乌斯反演的大多数题,例:【2011集训队出题】Crash的数字表格】
  7. 一个图,像做网络流,有要求最大最小,那么就是二分然后在用网络流判断。【NOIP2013模拟】导弹防御塔
  8. 有多组数据,数据间如果有影响,用离线大法。【NOIP2013模拟】Heaven Cow与God Bull
  9. 有些数论题,好像什么方法都不行,暴搜一下前几个,找找规律,这种题的数据范围一般都非常的大。【某道简单的不知名水题】
  10. 有些高级算法做不了的题目,试着去模拟一下这个算法,可以的话,用数据结构去维护。BZOJ 3638 【k-Maximum Subsequence Sum】
  11. 对于一道求1到n中与n互质或不互质的一些数的一些操作,想想容斥原理。【GDOI2016模拟7.10】Banner
  12. 在矩阵图搜索里面,如果有一个点对于另一个点移动后要要求最近的话,那么我们用最短路去维护。【NOIP2013提高组day2】华容道
  13. 题目长得像树的点分治的题,用点分治的思路去考虑,三方面:1. 链不包括根;2. 链的一端是根;3. 链覆盖根。【NOIP2012提高组】疫情控制
  14. 在维护一种颜色的最大值啊,和啊等等,可以开颜色的总数棵线段树,注意要动态开节点,防止空间爆炸。【SDOI2014】旅行
  15. 有时候有些DP的转移可以打成最短路去维护状态,最好向网络流一样连接一个起点s和终点t。【NOIP2013提高组day2】华容道
  16. 向筛大质数这样的题,数组会爆炸,那么可以考虑数组平移。【NOIP模拟】素数密度

  17. 双人博弈题,状态不是很多,可以倒着做DP。【NOIP模拟】舳舻牌

  18. 用容斥原理的,但是情况十分的少,为了防止出错,可以手推容斥公式。【GDOI模拟】习用之语

  19. 存在依赖关系的可以进行连边,如果涉及到DP,那么对依赖关系的贡献另外开一个数组。【NOIP模拟】备用钥匙

  20. 如果从DP好的数组推回原数组的方案数,那么要探究一下DP方程,而且每一位的可放置的数一般都是可连续的。【NOIP模拟】装饰大楼

  21. 强制在线就要想到可持久化数据结构。JZOJ4444【HNOI模拟】a

  22. 树上只用询问的可以打lca。JZOJ4444【HNOI模拟】a

  23. 对于01的序列进行区间取反,对相邻的两两进行xor一下,搞一个差分,中间的差分是不变的。【NOIP2015】IOIOI卡片占卜

  24. 看见位运算,就要想一想数字中0和1的变化。JZOJ4446【HNOI模拟】B

  25. 维护最大异或的东西,用trie来做。

  26. 求到有序序列的最少交换次数就求逆序对的个数。

  27. 对于维护最大段的什么东西(例如最值)之类的,要维护左右端点开头的什么东西(例如最值)。

  28. splay中要对一段进行操作,一般都把这一段放进一颗子树里面,具体操作:把[l,r]放进一颗子树,先把l-1旋转到根节点上面,然后才把r+1旋转为l-1的儿子,这样[l,r]都在r+1的左边了。

  29. 双关键字的mst,先排序第一个关键字,一条条边逐个插入,然后如果出现了一个环,那么删去换上第二个关键字最大的一条边。

  30. 如果有边权的话其实可以转化成点权,比如有n个点,x向y连一条编号为i边,可以建一个编号为n+i的点,x和y向其连边。

  31. 如果在处理权值区间的时候存在负数,那么就存n-x+1进去,避免负数,最后答案再用n-x+1就好了。

  32. 曼哈顿距离的奇偶性,考虑一下对网格黑白染色。

  33. 要求的答案可以变为a-b,并要求a-b最大,可是试着用最小割是的b最小。

  34. 如果要求一个状态到另一个状态至少要多少部,先看能不能建立一个图,然后如果是树形就够就求lca,否则走最短路。

  35. 如果要求+x后在[l,r]范围内有多少个,只用找[l-x,r-x]的范围有多少个数。

  36. 给很多个环,各自拆掉一条边,使得总和最小,那么就相当于求一个最大生成树。

  37. 莫队维护并查集可以维护一个f1[i]表示原来的父亲,后来再还原就好了。

  38. 线段树的区间定位值=2*(r-l+1)-包含区间的个数

  39. 每次在树上把点x到根的路径都加1,直接做是链的修改单点询问。但是如果每次只是单点修改,那么最后的值就变成子树询问,用dfs序然后用树状数组就能轻松解决。

  40. 处理关于最大值的区间问题,就直接找最大值,然后把这个值的合法区间预处理出来。

  41. 找一个数x在序列中有多少个是他的倍数或因数,直接找前面有多少个数是i的倍数,后面有多少个数是i的倍数,然后所有关于x的数量就是答案。(找倍数复杂度n log n,找因数复杂度nn)。

  42. 找[l,r]中有多少个数是k,可以一开始对所有的k开vector,然后二分的找。如果是最后只用统计答案的话,那么开个vector统计i这个位置要对那些数进行加减操作,最后统计一下就好了。

  43. 判断一些数里面是否有两个数的最大公约数是否等于a,那么找出所有a的倍数的数并在这个区间里面出现过,然后把它们全部的gcd求起来,如果等于a,那么就表示这里面必定有两个数是b*a,c*a,b和c是互质的。

  44. 一个hash精度不够大,用双hash,make_pair。
2 0