一、考试输入输出注意事项
1. 加速输入输出
ios::sync_with_stdio(false);
cin.tie(0);
避免 cin 和 cout 的缓冲绑定,提高性能。
2. 输入格式
getline() 读取整行文本时需注意前面是否已用 cin,必要时添加 cin.ignore();
- 输入如 “1,0,1” 要用字符串处理分割
3. 输出格式
- 多组数据输出注意控制空格与换行
- 浮点数输出格式控制:
cout << fixed << setprecision(6) << value;
二、常用 STL 容器和算法
1. 容器概览
| 容器 |
特点 |
vector |
动态数组,支持索引 |
deque |
双端队列,支持两端插入删除 |
stack |
栈 |
queue |
队列 |
priority_queue |
默认大顶堆,可设为小顶堆 |
set / map |
红黑树结构,自动排序 |
unordered_set / unordered_map |
哈希结构,常数查找 |
2. 常用算法函数
sort(v.begin(), v.end());
reverse(v.begin(), v.end());
min(), max(), swap(), abs();
accumulate(v.begin(), v.end(), 0);
三、模板与结构建议
1. solve() 结构
void solve() {
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
while (t--) solve();
}
2. 边界条件检查
- 输入空数组、全相同值、负数等特殊情况
- 模运算防负数
(a % mod + mod) % mod
3. 调试技巧
四、常见算法套路
| 类型 |
技巧/模板 |
| 前缀和 |
vector<int> pre(n+1) |
| 双指针 / 滑窗 |
while (r < n) 控制窗口 |
| 二分搜索 |
lower_bound, 手写 while |
| 并查集 |
find + union + 路径压缩 |
| 堆结构 |
优先队列(大顶堆/小顶堆) |
| 图遍历 |
DFS / BFS 标记 + 队列 |
五、提交前 Checklist
- 清除调试语句,如
cerr <<
- 检查 main()、return、头文件完整性
- 样例输出对比 + 边界值自测
- 使用 g++ 编译建议加
-std=c++17
六、心态建议
- 难题先跳过,优先拿稳的分数
- 模板题型快速展开写法
- 不要频繁切换题目,保持专注