C++ 竞赛入门

竞赛实用技巧

竞赛实用技巧与黑魔法

在算法竞赛中,合理使用编译优化指令、头文件技巧和快速输入输出,能够显著提升代码的运行效率并精简代码编写。

编译优化指令(常数优化黑魔法)

当题目对常数要求极高,或者算法常数较大时,可以在代码最开头添加 GCC 目标架构优化与循环展开指令:

#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")

注意:部分评测机(如老版本评测环境或某些严格限制 pragma 的平台)可能不支持或禁止部分指令,但在大多数主流 OJ(如 Codeforces、AtCoder、洛谷等)中均可正常使用。

常用头文件与模板简写

在竞赛中,通常直接使用万能头文件 <bits/stdc++.h>,并定义常用的类型别名:

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;

快速输入输出(Fast I/O)

C++ 的 cin 和 cout 默认与 C 语言的 stdio 缓冲区保持同步,并且每次输出前会刷新缓冲区。通过解除绑定和取消同步,可以让 cin/cout 达到与 scanf/printf 相当甚至更快的读取效率:

#define io ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

int main() {
    io;
    // 你的解题代码
    return 0;
}

提示:解除同步后,切记不要在同一程序中混用 cin/cout 和 scanf/printf,且行末换行推荐使用 '\n' 代替 endl(因为 endl 会强制清空缓冲区)。