CSP防爆零小技巧
这些不注意你可能喜提爆零。
关于变量与宏定义
宏定义坑
有的人写宏定义是这样写的:
1 | |
定义数组时写了:
1 | |
恭喜你,这道题可以跟满分说拜拜了。
因为 MAXN * 5 展开是:$10^6+5 \times5$ ,所以个人建议宏定义直接把需要开的内存开好,不要装逼。
变量名坑
我们机构在一次CSP-j模拟赛中出了一道很简单的T1,但很多人都挂掉了。这是因为他们使用了不该用的变量名。
j0 j1 jn y0 y1 yn这些变量你用过吗?如果用就赶紧改了这个习惯,因为这些在 <cmath> 中有定义,是贝塞尔函数的解。不要在全局变量用这些变量名。
你写二分左边界不要再用 left 了,因为 left 也是关键字。
另外如果你要用不妨加个下划线或首字母大写。
电脑配置与文件
电脑配置
不要擅自更改,你的电脑被你玩废了残忍的CCF是不会给你重测的,所以不要乱搞。
文件
第一层文件是你的准考证号,里面有四个子文件夹,每个子文件夹有一个对应的代码文件。
这里有个点就是给代码命名的时候会自动帮你加上后缀名,所以只需要写名字就行。(除非你没勾 隐藏已知文件的扩展名)
建议删除子文件夹以内除程序的其他文件,因为CCF可能会读到一些奇奇怪怪的东西。
关于freopen
不要用
1 | |
首先,他没用。其次,容易挂。
如果写了,你最后的答案可能不会出现在你的输出文件里。
因为程序结束会刷新全部缓冲,你没结束就把文件关了,最后的缓冲一般就进不来。
省时小技巧
用这个就行了。
1 | |
不建议用 endl ,用一下刷一下缓冲,很慢。\n YYDS。
注意了,调试代码建议把cin.tie(0)注释掉,不然会在最后缓冲区才输出。
代码里的坑
- 数组越界,精度问题。
double整数部分只是int类型,超了要用long double- 非
void类型函数如果没有返回对应类型的值,Windows 下没有问题,但是 比赛评测环境会RE。 - 谨慎使用
pow因为这个函数返回值不是整数!迫不得已(算小数次幂或开根)才用,最好写快速幂。 double可能会出现精度缺失的现象。- 某函数通过传参改变全局变量的值时变量名前要加
& - 递归时如果某个参数始终不变建议变量名前加
&,因为不加每次新递归会备份一下参数,加&会用原来的变量做操作。 XeY代表 $X \times 10^Y$ 但这个东西是个小数。- 一个数默认
int,如果你想表示这个是long long类型需要在后面加ll或LL。 - 如果你
#define int long long,那么你算内存时可不要按int类型的 $4$ 字节去计算。 - 位运算时计算 $2^n$ 时一般人会写
1<<n,但如果爆int要写成1LL<<n
一些有意思的爆零原因(真实事件)
有个人把freopen的xxx.in后面加了空格,赛后表示:这样双引号会对整齐很好看。
监考让把in,out文件删了,有个大聪明把freopen删了。
有个小可爱给考场上的电脑设置了密码,后续自行脑补。
某人在考试快结束时疯狂摁 Ctrl+s 有一下 ctrl 没摁上。程序里多了个 s。。。后续脑补即可
常用数学公式
$$
\sqrt[m]{n}=n^{\frac{1}{m}}\
$$
这个时候就体现 pow 的重要性了。
$$
\text{lcm}(a,b)=\frac{a\times b}{\gcd(a,b)}
$$
自带__gcd函数,并且不禁用(真香)。
还有就是
变量名,结构体名称等代码里不可以出现
f**k_CCF,f**k_csp这种字眼。否则会取消成绩并禁赛。如果你电脑出现故障请告诉监考。不要自己修改(
怎么说的跟规则怪谈一样)。因为这是你的电脑自己出故障的唯一证据。允许带食物只是因为防止低血糖的。不要带有刺激性的食物(榴莲,臭豆腐等)。即使你带了人家不一定放你进去。