由于近期模拟题原地**次数较多,故写一篇警示文
1,头文件
1.1正式比赛中,反正我不敢用bits/stdc++.h。
1.2正式比赛中,建议打出以下十个库
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<vector> 6 #include<algorithm> 7 #include<set> 8 #include<map> 9 #include<queue> 10 #include<bitset>
11 #include<stack>
2,宏定义
2.1 #define通常用于定义最大值,模值数值
2.2 通过宏定义的函数,一定要注意是否需要加括号(宁可多加不要少加)
3,数据范围
3.1 需要特别注意程序运算过程,最后输出环节中数据规模是否会大于int,是否会大于long long,如大于int,建议采用全局long long(修改建议用IDE的find实现)
3.2 需要特别注意程序运算过程中的取模环节,在不卡常的情况下,可以打多几个,以防止爆long long/int
3.3 一定要看好数据范围,不能开少(例如:有向边/无向边,线段树空间*4,可持久化线段树空间*log(n)),开够后用极限数据+本地O2进行爆空间检测。
4,输入输出
4.1 一定要看好文件的输入/输出名称,绝对不可打错!!!
4.2 输入输出,在数据范围不大时用cin,否则用scanf,使用scanf时需要特别注意数据类型为int/long long,防止出锅(linux&win7+均为%lld)
4.3 除非迫不得已,不要使用读入优化
5,线段树/splay相关
5.1 线段树,splay等要先进行肉眼调错,降低调试工作量
5.2 能用线段树/树状数组,不要用splay,减轻工作量
5.3 splay每完成一次操作,记得调用splay操作
5.4 线段树/splay每完成一次操作,记得调用pushup(如果需要的话)
6,对拍相关
6.1 对拍bat务必检查是否调用了makedata
6.2 对拍需要尽可能尝试多种构造数据(例如:一条链/扫把树,全是某些数,递增/递减序列)
6.3 务必需检查好两个对拍文件的文件名,绝对不可以将暴力交上去
6.4 不要尝试调试拍出错的大数据!
7,其它注意事项
7.1 使用结构体时,注意构造函数内的初始化
7.2 使用memset时,请注意_len大小,不要尝试对一个指针求sizeof
7.3 有细节部分时,先想清楚,在纸上写好,再开始打
7.4 思考要全面,贪心算法等要尽可能地构造反例!!
7.5 在定义MAX时,要考虑最坏情况,必须大于正常可构造的最大情况。
7.6 注意树剖/并查集合并siz/dep时的符号方向!
(暂时想了这么多,又想到我会来补充)