细节错误收纳

$Mistakes$

考前背好vim

if (clock( )/CLOCKS P ER SEC > 0.95)return;

while(a[i]…)++i ; 要注意越界的情况
浮点数注意单独写个判断相等的函数
用fabs

先读完所有题想完方法再开始写
想清楚你的方法
尽量想好细节再打
没有考虑清楚的话只会增加调试时间,越写越难写

当你想了很久想不出来一道题或者想出一道题时,再把题目看一遍

如果在研究一道题正解没有什么思路的话,可以先研究部分分,部分分都是对正解有提示作用的

对于一些感觉比较偏结论的题,可以考虑找找规律

如果你觉得这道题正解细节较多或比较难写,一定要先去把其他题能拿的分和这题的暴力写了

永远不要在还有其他题可写的情况下去头铁写一道你不一定能搞出来的题!!!
打到一半觉得不可行一定要备份再删

看清题目的条件
题目里的数据一定不要看错(不要把1e8+7看成1e9+7)

不要拿0做除数

想不出的时候多看看题

尽量减少代码常数,可能可以取得意想不到的分

首先想出特殊值
考虑各种习惯性看做不可能的情况
比如没有任何解
0 是非常恶心的点
还有判断质数时的 1

编译前先认真检查一下,静态查一下

记得打文件输入输出
freopen…

有vis判断时记得判断是否要标记起点
起点!!!!

搜索尽可能多的剪枝

数组…一定要考虑越界问题
如果程序看上去跟标程一样但是偏偏错了
80%就是数组太小的锅
而且只有全局函数可以开很大
局部函数即使放在main函数内也会有一旦数组稍大就异常退出的情况
而且n个数据要开到n+1的数组大小
尤其是玄学错误
大多数情况下都是数组越界了

看不懂题就分析样例
手动画图

函数内部的变量!!
有很多时候都是要做成局部变量的!!!
别老是全局全局全局的搞来搞去
理解?

顺序…
下一行要用到的变量不要在这一行就改变了…
或者是在改变之前就return了什么的…
检查起来会很麻烦
你总有一天会被自己蠢死啊
!!!

二分法不要忘记,很好用

暴力配合map

有时候为了卡裸暴力,出题人会多次询问较大的区间,我们可以预先
把这种区间的答案算出,然后O(1)回答

考试结束之前不要再打题,再检查一遍数组(不要开大/小)
再编译一遍测样例,检查有没有注释没删,测样例一定要用diff
建好子文件夹,检查文件名以及freopen
检查数据范围(读入long long,模数,取模不要爆负
多组数据一定要多复制几遍测,记得数组清零,注意不要用y1等变量

数组不要出现负的下标!

初始化

单调队列get

区间dp枚举起点+长度

开桶存bool

如果有时候用一个状态可以直接得到另一个状态…就可以少开一维了

如果不好求满足条件的,用全集减去不满足条件的试试看

关于DP:正难则反
无论多复杂的转移方程,先写出来看看
正着不好推就试试负着推
主要是考虑当前选择是否是无后效性的

缩点考虑离散化和%某个数

考前晚上不要看电子书…
会眼睛痛

不要在还没考完的时候跑去搞颓