[不断更新中] 各种错误&&总结

各种错误

无论感觉多稳都要对拍对拍对拍!!!
不要爆long long 不要爆long long 不要爆long long 不要爆long long 不要爆long long 不要爆long long 不要爆long long
二维ST表注意边界(见模板)
连续lcm不可模
两个指针注意只有左指针对应值不变时,右指针需要复位
用while循环时有范围的一定标上范围
数组或变量名必须区分清楚
在做有单调性的题目时一定注意是哪个量单调,不要找错了
分解质因数时一定注意分解到最后如果不是1也要加在答案里
拓扑排序一定要注意度数相同可能有多个点,注意考虑多起点的情况,一般转化为1维序列操作(注意可能有多个序列,不可随意更换)
永远不要把数组大小卡的自认为太准确,能开就往大开
最后一定要检查数组大小是否够用
审的题意和考题题意不一样 qwq
最大值设的不够大 (答案超过intQAQ)
dp数组没有初始化
dp导致数组越界RE
直接输出dp中的值(其实要利用dp值判断最终答案)
树链剖分查询时循环内比较dep[top[x]]和dep[top[y]]循环外dep[x]和dep[y]
树链剖分初始化cnt tot head[] son[]!!!
freopen!!!
stl不一定好用好调Orz
时刻小心爆int!!
用stl中的size()时千万不要把它-1,会直接RE(我也不明白为什么)
tarjan缩点更新low[u]时注意一定是没走过或在栈中!!!

各种总结

数列上的操作一定想想用数据结构优化!!
阶乘有模数的时候可以确定后面是0
公式题一定注意手动尝试化简一下
打表找规律优先答案
1e9的范围无非公式logn或者数位dp
看到数据范围为几十时首先想折半搜索
双哈希常数较大,一般用单哈希即可
硬币问题当前局面的SG值为所有背面朝上的硬币单个SG值的异或和
当我们要快速得到一个数与之前某个数差的二进制表示第i位为1的有多少个,可以统计前几位的值考虑如何借位出现1具体见这里
当知道一半状态就能推出全部状态的dp时可以知记录一半的状态,或用下标记一种状态,权值记另一种状态,使dp可以忽略一半的情况
正难则反,尤其是在统计的时候,可以想想目标集合的补集是否好求,尝试求补集
最小(大)生成树 求解保证某 两个点连通性 和 最小边权最大(类似)的问题
最短路可以解决 通过一些步骤(互不干扰且有互相联系)从起点到终点,找到最小代价的题 只需想办法构图
\(\sum_{i=1}^{n}\frac{1}{i}\) \(\approx log_2 n\)
博弈论可以尝试用dp转移必胜策略(当前状态是否必胜)
dp中若用到一段dp值的和并且每次只修该段的前部和后部,那么我们可以利用sum加速类似单调队列?
并查集树(按秩合并):深度为\(log_2 n\) 可以有边权 可去掉满足连通性的重边
卡常(感觉?):void函数快,int比long long快,for循环比while快
求多个高次二项式之和:二项式定理。带修改:全局变量
组合数可以O(1)移动,可用莫队
对于一个集合如果元素种类确定可以按种类增加按权值减少
判断一个点是否在多边形内可以将这个点往外连一条射线看与多边形相交几次
二维dp且有状态是全局的时可以让这一行第一个值由上一行最后一值转移而来
数轴一些区间覆盖一些点,如何找到和前一个点多出的区间数以及相同的区间数:(不能用递推全局变量:无法做到与事实统一)

for(int i=1;i<=n;i++) {
	id1=lower_bound(a+1,a+1+m,l[i])-a;
	id2=upper_bound(a+1,a+1+m,r[i])-a;
	if(a[id1]<=r[i])s[id1]++;//与前一个不同的
	if(id1<id2)sum[id1+1]++,sum[id2]--;//与前一个相同的(还需求前缀和)
}
posted @ 2018-07-22 18:35  Menteur_hxy  阅读(241)  评论(0编辑  收藏  举报