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会强制清空缓冲区)。