在算法竞赛中,我们对开发环境的要求只有三个:快、稳、准。
- 快:编译快,运行快,输入测试数据快。
- 稳:不崩坏,不仅支持 C++11,最好支持到 C++14/17/20。
- 准:和比赛时的评测环境尽可能一致。
2.1 核心:编译器 (GCC/G++)
无论你用什么编辑器写代码,最后干活的都是编译器。算法竞赛界(包括 ICPC 和 NOI)的标准是 GCC (GNU Compiler Collection)。
- 如果你是 Windows 用户:你需要安装 MinGW-w64。
- 简单方案:直接下载带编译器的 IDE(如 Dev-C++ 或 Code::Blocks),省去配置环境变量的麻烦。
- 专业方案:单独下载 MinGW,配置系统环境变量
Path,这样你就可以在命令行(CMD/PowerShell)里直接用g++命令了。
- 如果你是 macOS 用户:打开终端输入
g++ --version。如果没安装,系统会提示你安装 Xcode Command Line Tools,点确认即可。 - 如果你是 Linux 用户:恭喜你,你的系统原生支持。
🔍 验证是否安装成功 打开你的终端(Terminal/CMD),输入:
g++ --version如果出现版本号(如 11.2.0),说明编译器就绪。
2.2 IDE/编辑器推荐:选一把趁手的剑
市面上有几十种工具,针对竞赛,我推荐以下三种方案,请根据你的情况“对号入座”:
方案 A:VS Code (Visual Studio Code) —— 最强推荐
- 适用人群:绝大多数人,想兼顾以后做工程开发的人。
- 优点:插件丰富、界面美观、轻量级。
- 必备插件:
C/C++(Microsoft 官方插件)C/C++ Compile Run(一键按 F6 运行)- 🔥
Competitive Programming Helper (cph):这个插件是神器!它能自动抓取 OJ 上的测试样例,一键自动批量测试,强烈建议安装。
方案 B:Dev-C++ —— 怀旧与考试专用
- 适用人群:准备参加 CSP-J/S 或 NOIP 的中学生。
- 原因:很多省份的考场机器上只有这个老古董。虽然它界面过时、甚至没有代码补全,但你必须得习惯它,以免上考场因为不会用工具而心态炸裂。
方案 C:CP Editor —— 专为竞赛而生
- 适用人群:只做算法题,不想折腾配置文件的纯粹主义者。
- 优点:它不是通用的 IDE,它是专门为算法竞赛设计的。左边代码,右边输入输出,一键提交到 Codeforces。开箱即用。
2.3 万能头文件:#include <bits/stdc++.h>
在标准的软件开发中,我们需要什么库就引什么库(如 <iostream>, <vector>, <algorithm>)。
但在争分夺秒的比赛中,我们有一个“作弊码”:
#include <bits/stdc++.h>
using namespace std;
int main() {
// 这里可以使用几乎所有的 C++ 标准库函数
// 无论是 sort(), vector, 还是 max(), min()
return 0;
}- 优点:省去了背诵几十个头文件的麻烦,一行代码解决所有依赖。
- 缺点:编译时间会稍微变长(几百毫秒),且不是标准 C++(但在 GCC 编译器下通用)。
- 结论:在比赛中,放心大胆地用。
2.4 输入输出加速:向 TLE 说再见
C++ 的 cin 和 cout 非常方便,但它们为了兼容 C 语言的 scanf / printf,默认开启了“同步流”,导致效率较低。当输入数据量达到 或 级别时,单纯因为用 cin 就可能导致 TLE (超时)。
你需要将这两行代码作为你的代码模板的一部分,放在 main 函数的第一行:
int main() {
// 关闭同步,解除绑定
ios::sync_with_stdio(0);
cin.tie(0);
// 你的代码逻辑...
return 0;
}⚠️ 注意:开启加速后,不要混用
cin/cout和scanf/printf,否则输出顺序会乱掉。
2.5 告别黑框框:文件重定向 (File I/O)
每次运行程序都要手动在黑框里输入一大堆测试数据,非常累且容易输错。我们可以让程序直接从文件读取数据。
技巧:freopen
- 在代码同目录下建一个文本文档
in.txt,把题目给的样例输入复制进去。 - 在代码中加入重定向语句:
#include <bits/stdc++.h>
using namespace std;
int main() {
// 如果是在本地电脑运行(通常没有定义 ONLINE_JUDGE 宏)
// 就从文件读取输入
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout); // 甚至可以输出到文件
#endif
ios::sync_with_stdio(0); cin.tie(0);
int a, b;
while(cin >> a >> b) {
cout << a + b << endl;
}
return 0;
}这样,你每次按运行,程序会自动读取 in.txt 里的内容,结果直接显示出来。提交到 OJ 时,因为 OJ 定义了 ONLINE_JUDGE,这行代码会自动失效,无需删除。
🛠️ 你的作业
- 下载并安装 VS Code(或者 Dev-C++)。
- 安装 C/C++ 插件。
- 编写一个包含
ios::sync_with_stdio(0);和<bits/stdc++.h>的“Hello World”程序并成功运行。
搞定环境后,我们就要正式开始学习算法竞赛中最强大的武器——C++ 标准模板库 (STL)。