CSP防爆零小技巧

这些不注意你可能喜提爆零。

关于变量与宏定义

宏定义坑

有的人写宏定义是这样写的:

1
#define MAXN = 1e6+5

定义数组时写了:

1
int a[MAXN * 5];

恭喜你,这道题可以跟满分说拜拜了。
因为 MAXN * 5 展开是:$10^6+5 \times5$ ,所以个人建议宏定义直接把需要开的内存开好,不要装逼。

变量名坑

我们机构在一次CSP-j模拟赛中出了一道很简单的T1,但很多人都挂掉了。这是因为他们使用了不该用的变量名。

j0 j1 jn y0 y1 yn这些变量你用过吗?如果用就赶紧改了这个习惯,因为这些在 <cmath> 中有定义,是贝塞尔函数的解。不要在全局变量用这些变量名。

你写二分左边界不要再用 left 了,因为 left 也是关键字。

另外如果你要用不妨加个下划线或首字母大写。

电脑配置与文件

电脑配置

不要擅自更改,你的电脑被你玩废了残忍的CCF是不会给你重测的,所以不要乱搞。

文件

第一层文件是你的准考证号,里面有四个子文件夹,每个子文件夹有一个对应的代码文件。

这里有个点就是给代码命名的时候会自动帮你加上后缀名,所以只需要写名字就行。(除非你没勾 隐藏已知文件的扩展名

建议删除子文件夹以内除程序的其他文件,因为CCF可能会读到一些奇奇怪怪的东西。

关于freopen

不要用

1
2
fclose(stdin);
fclose(stdout);

首先,他没用。其次,容易挂。

如果写了,你最后的答案可能不会出现在你的输出文件里。

因为程序结束会刷新全部缓冲,你没结束就把文件关了,最后的缓冲一般就进不来。

省时小技巧

用这个就行了。

1
2
ios::sync_with_stdio(0);//让C++io和Cio一样快 
cin.tie(0);//解绑cin的绑定流

不建议用 endl ,用一下刷一下缓冲,很慢。\n YYDS。

注意了,调试代码建议把cin.tie(0)注释掉,不然会在最后缓冲区才输出。

代码里的坑

  • 数组越界,精度问题。
  • double 整数部分只是 int 类型,超了要用 long double
  • void 类型函数如果没有返回对应类型的值,Windows 下没有问题,但是 比赛评测环境会 RE
  • 谨慎使用 pow 因为这个函数返回值不是整数!迫不得已(算小数次幂或开根)才用,最好写快速幂。
  • double 可能会出现精度缺失的现象。
  • 某函数通过传参改变全局变量的值时变量名前要加 &
  • 递归时如果某个参数始终不变建议变量名前加 &,因为不加每次新递归会备份一下参数,加 & 会用原来的变量做操作。
  • XeY代表 $X \times 10^Y$ 但这个东西是个小数。
  • 一个数默认 int,如果你想表示这个是 long long类型需要在后面加 llLL
  • 如果你#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_CCFf**k_csp这种字眼。否则会取消成绩并禁赛。

  • 如果你电脑出现故障请告诉监考。不要自己修改(怎么说的跟规则怪谈一样)。因为这是你的电脑自己出故障的唯一证据。

  • 允许带食物只是因为防止低血糖的。不要带有刺激性的食物(榴莲,臭豆腐等)。即使你带了人家不一定放你进去。


CSP防爆零小技巧
https://joshua0729.github.io/2025/10/03/CSP防爆零小技巧/
作者
Joshua0729
发布于
2025-10-03 14:10:00.3737
更新于
2025-10-25 10:10:20.2525
许可协议