拿到题目先写裸的暴力,暴力必定要写对,没想出正解有暴力垫底,想出了正解也能够拿来拍html
过了样例以后必定要造数据测,数据越坑越好算法
必定要造极限数据,哪怕造不知道答案的数据都行,主要是检测RE和TLE,正确性用拍来检测数组
若是目前已经能够拿到很高的分,能够考虑放弃剩余的小分数,把时间留给其它地方数据结构
题目必定要认真仔细看清楚,坚定避免代码写完告终果题目看错的状况优化
样例必定要手动分析一遍,或许分析的过程当中就能找到思路,同时分析样例也是帮助理解题意spa
简单的题目要照简单的方法作,不要想着一些高大上的东西,只要能过就行htm
注意数组的大小,在不爆空间的状况下宁愿开大一点blog
遇到题面很难读懂的题目通常都是水题,只是它的外表迷惑了你队列
特殊的数据要写骗分,好比m=1或者k=n之类的字符串
代码里用 if 判断选择不一样数据范围,小的数据用暴力,大的数据写正解,这样是最保险的
想不出来的必定不能空着,哪怕猜个结论,输出个n/2,随机一个数均可以
连通性想到并查集,这是很优秀的一个数据结构
DP方程能够作变形,从中发现是否具备单调性,或者能够作斜率优化等等
对于一个正整数n,能够用二进制来表示,也就是每一位能够用若干个2k相加来表示
范围给的很小的题目正解一般就是搜索,若是搜索跑不出来能够想一想状压DP
只有一个数字的输入或者范围给的太大(如n=231)每每可以O(1)地作,并且通常这种题目可以打表找规律,或者推出O(1)的公式,或者根据n来骗分也能够;若是公式推出来是O(n)的可是答案是有规律的,那么能够分段打表
哈希值要定好,两个大的哈希模数是109+9和109+7,乘的p取6-8位的质数,能够用106+7和106+9
求最值题先想贪心,再想DP,二分答案,若是想不出来正解能够贪心骗分
DP发现时间复杂度不对可是优化不了的时候,能够随机前面的状态转移,随的次数根据时间去计算
贪心要去证实它的正确性,能够找反例,或者拿暴力去拍
正确性不肯定的算法必定要拍
通常题目都不会卡SPFA,有时SPFA比Dijkstra+堆还快
在判断 x>0 的时候必定要想 x 会不会有负数的状况,若是有负数单单写个 if(x) 是错误的
字符串千万别用gets读入,scanf("%s") 是以空格或者回车做为字符串的结束标志
许多二分栈能够优化成单调队列
记忆化搜索容易写,不用想DP的拓扑关系,缺点是没法剪枝,因此要算好复杂度
欧几里得距离是实际的距离,曼哈顿距离是横纵坐标差的和,切比雪夫距离是取max(横纵坐标差),也就是国际象棋王走的最短距离
DP找不到单调性的时候能够把状态打出来,寻找它的单调性
经典的模型必定要会写,并且要写得熟练
DP的转移能够用数据结构维护以前的状态
有些题目的正解就是从暴力一步步推出的,或者是一些特殊数据的算法的结合版
最长先后缀能够用KMP的预处理线性得出
带条件限制的最短路能够增长一维状态来作
对于0,1之类的小数据要作特殊判断
数据范围是n<231时不能直接 for(;i<=n;i++),由于i=231-1时再i++就会变成负数
通常有最优性剪枝的搜索均可以卡时
若是对于每一个询问都要作相同的预处理,能够把连续的询问放在一块儿预处理,这样效率会高些
题目要求选择一些特殊的点时,将这些点加上或者减去一个数会影响答案,那么这就能够进行二分
裸的数据结构题先打暴力,通常这类题的正解又臭又长,很难短期内写对
相似于八车问题,能够用把行和列拆成点作二分图匹配
若要求数列中某个数不为其中两个数之和(或同一个数的两倍),那么最多能够放的数为最小的数的值
代码一边写要一边想,争取一次打对
贪心证实是错的题目,或许可以贪心+调整作
若是实数比较要求输出3位,必定要输出4位及以上,总之要比它至少多一位
long double不能直接输出,要转成double再输出
整数除以整数,即使是赋值给实数,获得的也是整除的结果
式子里至少有一个long long,否者会爆int
若是下一行要读入字符串,那么这一行的scanf("%d",n)要加上\n变成scanf("%d\n",n)
每道题均可以加读入和输出优化
一个环能够复制一遍接到后尾成一条2n的链,这样能够选断点的时候操做更简便
若是一个点为两点之间的必经点,那么删去这个点会致使这两点不连通
要求乘积的最值,能够转换成把每一个取对数相加的最值
树上倍增转移值时,g[j][i]=g[j][i-1]+g[f[j][i-1]][i-1],右边g的第一维中为f(祖先),不为g
若是在拍中还输出了别的东西,提交的时候必定要改回来
在最终提交前,要把全部代码都测一遍样例
在我的文件夹下建子目录,外面也要放源程序
若是有多组数据,能够把样例合在一块儿再测一遍
若是long long加了读入优化,读入必定要改为long long,也就是说换了类型的变量在全部读入和输出中都要换
卡时的地方判断必定要是 if (clock()>TL*CPS) 一个不能错
版权全部,转载请联系做者,违者必究