注意事项汇总


一、代码模板

考场上先把下面这个模板敲好,再开始读题写代码。

#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 准备工作

  1. 写出代码,先在代码里注释掉 freopen,让它在本地控制台输入输出
  2. 编译运行,会在当前目录生成 .exe 可执行文件
  3. 将 .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() 怎么办?

直接用命令行。步骤:

  1. Win + R → 输入 cmd,打开命令行
  2. 在文件夹地址栏复制当前路径(如 D:\test)

地址栏里的路径可以直接复制,后面配合 cd 命令进入这个目录。

  1. 命令行中输入 cd D:\test 并回车
  2. 如果路径有盘符变化(如从 C 盘到 D 盘),再输入 D: 回车

进入成功后,命令行前缀会变成目标目录。

  1. 直接执行命令:
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 小样例 / 手算数据也测过了

0 条评论

目前还没有评论...