🚀 《NOIP / CSP常见爆炸点清单》(实战版)
👉 核心一句话:
❗很多题不是不会做,是死在细节上
🧨 一、数据类型爆炸(最常见🔥)
❌ 错误写法
int sum = 0;
💥 场景
n = 2e5
Ai = 1e6
👉 总和:
≈ 2e11(超 int)
✅ 正确写法
long long sum = 0;
❗ 输出也要改!
printf("%lld", sum);
🧨 二、数组越界(隐蔽杀手)
❌ 错误
const int N = 2e5+5;
但数据:
n = 2000000
👉 直接炸
✅ 正确习惯
const int N = 2000005; // 留余量
🧨 三、栈爆炸(很多人不知道)
❌ 写法
int a[n]; // n 很大
👉 栈只有几 MB
💥 结果
- RE
- 随机错误
✅ 正确写法
const int N = ...;
int a[N]; // 全局
🧨 四、输入输出超时
❌ 慢写法
cin >> x;
(大数据)
✅ 优化写法
ios::sync_with_stdio(false);
cin.tie(0);
或:
scanf("%d",&x);
🧨 五、重复计算(时间爆炸)
❌ O(n²)
for(i)
for(j)
💥 数据:
n = 2e5
👉 直接 TLE
✅ 思路
- 前缀和
- 排序
- 双指针
- 哈希
🧨 六、排序后忘记“原位置”
❌ 错误
sort(a,a+n);
👉 输出顺序错
✅ 正确
struct node{
int val, id;
};
🧨 七、相同元素处理错误(你这题的坑🔥)
❌ 错误
每个 i 单独算
👉 相同数结果不同 ❌
✅ 正确
一组一组处理(i → j)
🧨 八、边界没处理
常见:
- n = 1
- 全相等
- 全递增 / 递减
🧨 九、未初始化
❌
int a[100];
👉 里面是垃圾值
✅
int a[100] = {};
🧨 十、爆内存(高级一点)
❌
vector<int> a(1e8);
👉 直接 MLE
🎯 课堂总结(你可以直接讲)
你可以用这段收尾👇
🎤 讲课金句
算法题有两关:
第一关:你会不会做
第二关:你写的代码能不能过❗很多人死在第二关
🔥 再送你一个“竞赛口诀”(很好用)
大数据 → 想复杂度
大数值 → 想 long long
排序后 → 想原位置
有重复 → 想分组