- admin 的博客
-
注意事项汇总
- @ 2026-10-10 1:02:01
注意事项汇总
一、代码模板
考场上先把下面这个模板敲好,再开始读题写代码。
#include <bits/stdc++.h>
// #define int long long
#define inf 0x3f3f3f3f3f3f3f3f
using i32 = int;
using i64 = long long;
const int MOD = 1e9 + 7;
const int MAXN = 1e5 + 10;
using namespace std;
void solve() {
// 在这里写题解
}
signed main() {
freopen("xxx.in", "r", stdin);
freopen("xxx.out", "w", stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int T = 1;
// cin >> T;
while (T--) {
solve();
}
return 0;
}
模板要点:
| 项 | 说明 |
|---|---|
freopen |
文件输入输出,必须写,注意 "xxx.in" / "xxx.out" 中的文件名要和题目一致 |
ios::sync_with_stdio(0) + cin.tie(0) |
必须写,否则 cin/cout 超时 |
#define int long long |
默认注释,需要时取消注释。注意此时 main 要写 signed main |
// cin >> T |
多组数据时取消注释 |
二、输入输出与速度
2.1 关闭流同步
ios::sync_with_stdio(0);
cin.tie(0);
这两行能让 cin/cout 的速度接近 scanf/printf。
⚠️ 写了这两行后,绝对不能混用
cin/cout和scanf/printf,否则输出顺序会乱,直接 WA。
2.2 换行用 '\n',别用 endl
endl 不仅换行,还会刷新缓冲区,比 '\n' 慢得多。大数据输出时 endl 可能导致 TLE。
// ❌ 慢
cout << ans << endl;
// ✅ 快
cout << ans << '\n';
// ✅ 也可以一开始就
#define endl '\n'
2.3 cout 格式化输出
cout << fixed << setprecision(x); // 限定小数点后 x 位
cout << setw(x); // 限定输出占 x 格宽度
如果忘了这些,直接用 printf。注意用了 printf 就不能用 cin/cout(见 2.1)。
2.4 freopen 文件输入输出
freopen("xxx.in", "r", stdin);
freopen("xxx.out", "w", stdout);
- 文件名要和题目给的英文简写一致,不要写成中文
- 本地测试时可以注释掉,但交卷前必须取消注释
- 不要在
freopen里写错文件名——交上去读不到输入,直接 0 分
三、变量命名避坑
3.1 这些变量名会 CE(在 Windows 下不报错,但提交爆 0)
<bits/stdc++.h> 万能头内部已经定义了某些变量名,自己再定义同名的就会编译错误。
| 禁用变量名 | 原因 |
|---|---|
y1 |
万能头内的数学库有 y1() 函数 |
y0 |
同上 |
x0, x1 |
同上,虽然不常见但注意规避 |
j0, j1 |
同上 |
min, max |
万能头有 min() / max() 函数,定义同名变量会冲突 |
好的习惯:变量名尽量用有意义的英文单词(left, right, ans, pos……),避开短命名。
3.2 不要使用 C++ 关键字做变量名
int, return, class, new, delete 等关键字都不能做变量名,编译器会直接报错。
四、取模运算
所有需要取模的题目,记住两条铁律:
4.1 每一步都取模,不要攒到最后
// ❌ 只在最后取模——中间结果可能溢出 long long
long long ans = 0;
for (int i = 1; i <= n; i++) ans += a[i];
cout << ans % MOD;
// ✅ 每一步都取模
long long ans = 0;
for (int i = 1; i <= n; i++) ans = (ans + a[i]) % MOD;
cout << ans;
4.2 遇到减法先加 MOD
// ❌ C++ 中负数取模仍为负数
int ans = (a - b) % MOD; // 可能是负数!
// ✅ 先加 MOD 再取模
int ans = (a - b + MOD) % MOD;
口诀:加完取模,减完先加 MOD 再取模。每步不漏。
五、大样例比对(Checker)
5.1 准备工作
- 写出代码,先在代码里注释掉
freopen,让它在本地控制台输入输出 - 编译运行,会在当前目录生成
.exe可执行文件 - 将
.exe文件与大样例xx.in、xx.ans放在同一个文件夹里
例如下面这样,程序、样例输入、标准答案、检查器都放在同一个目录下,后面运行命令时就不需要再写复杂路径。

5.2 用 checker.cpp 比对
在同一文件夹下创建 checker.cpp:
#include <bits/stdc++.h>
using namespace std;
int main() {
system("b.exe < b.in > b.out"); // 用 b.in 做输入,输出到 b.out
system("fc b.out b.ans"); // 比对 b.out 和 b.ans
return 0;
}
编译运行 checker.cpp,控制台会直接显示比对结果——相同返回 0,不同会列出差异行。
5.3 进阶:只看不同行
system("fc /N /LB1 b.out b.ans");
加了 /N /LB1 后,只显示差异行的行号和内容,比对成功的行不显示,大样例也一目了然。
下面的结果表示第 2 行不同:自己的输出是 6,标准答案是 32。

5.4 考场禁用了 system() 怎么办?
直接用命令行。步骤:
- Win + R → 输入
cmd,打开命令行 - 在文件夹地址栏复制当前路径(如
D:\test)
地址栏里的路径可以直接复制,后面配合 cd 命令进入这个目录。

- 命令行中输入
cd D:\test并回车 - 如果路径有盘符变化(如从 C 盘到 D 盘),再输入
D:回车
进入成功后,命令行前缀会变成目标目录。

- 直接执行命令:
b.exe < b.in > b.out
fc b.out b.ans
效果和 system() 一模一样,只是直接在命令行里敲了。

六、考场提交规范
6.1 文件夹结构
考号文件夹/
└── xxx/ ← 自己新建,文件夹名 = 题目的英文简写
└── xxx.cpp ← 你的代码,文件名 = 题目的英文简写
总文件夹下面通常会按题目英文简称分成多个子文件夹,例如 mobile、normal、teach、tech。

每个题目单独一个子文件夹,里面只放一个 xxx.cpp 文件。
进入某一道题的文件夹后,里面只需要放这道题对应的 .cpp 文件。

6.2 只交 .cpp
不用交 .exe、.in、.out、.ans 等文件,只交源代码 .cpp 文件。
6.3 Windows 显示文件扩展名
Windows 默认不显示文件扩展名。点击文件夹上方的 查看 → 显示 → 文件扩展名,勾选后才能看到 .cpp 后缀。
如果不打开这个,你以为是 teach.cpp,实际上可能是 teach.cpp.txt——交上去不识别,0 分。
6.4 文件命名
- 所有文件名使用题目给定的英文简写,不要写中文
- 考场会提供检查器验证命名是否正确,按监考老师指示操作
七、部分分策略——正解写挂也要保住暴力分
7.1 多写几个 solve 函数
void solve1() {
// n <= 2000 的暴力枚举,保证正确
}
void solve2() {
// 特殊性质(如全部相等)的解法
}
void solve() {
cin >> n;
if (n <= 2000) { solve1(); return; }
// 否则尝试正解...
}
在主函数里根据数据范围或特殊性质分流:
- 小数据 → 走暴力(
solve1),100% 正确 - 大数据 → 走正解(可能写挂,但至少小数据的分已经拿到了)
7.2 什么时候用这招
- 正解复杂、容易写错
- 正解不会推导,但暴力能拿 30%~60% 的分
- 你觉得时间不够写完正解了
宁可暴力保底,不要正解爆 0。
八、快速检查清单
交卷前,逐条确认:
| 序号 | 检查项 | ✓ |
|---|---|---|
| 1 | freopen 写了,文件名和题目一致 |
|
| 2 | ios::sync_with_stdio(0) + cin.tie(0) 写了 |
|
| 3 | 没有混用 cin/cout 和 scanf/printf |
|
| 4 | 输出换行用的是 '\n' 不是 endl |
|
| 5 | 变量没命名为 y1、min 等禁用名 |
|
| 6 | 取模每一步都做了,减法有 +MOD |
|
| 7 | 大样例比对通过 | |
| 8 | 文件夹结构正确:考号/题目名/题目名.cpp |
|
| 9 | Windows 显示文件扩展名已打开 |
|
| 10 | 小样例 / 手算数据也测过了 |