做题经验总结(干货满满,持续更新!)

注意点:

题目部分:

  1. 数组范围注意不要开错(记得修改缺省源)。
  2. 并查集数组要开两倍
  3. 翻译看不懂的话要自己翻。
  4. 题目中没用的信息跳过不看。
  5. 子串子序列看清楚!
  6. 要看样例解释

代码部分:

  1. 多测不清空,爆零两行泪。
  2. dp 初始化不要忘记(最好设成 LONG_LONG_MAXLONG_LONG_MIN!)。
  3. memset 最好不要用,复杂度高,容易超时。
  4. 判断相等应是 ==
  5. maxmin 中前后的数据类型要相同。
  6. 不能随意long long,可能爆空间。
  7. 看数据范围, 不开 long long 见祖宗
  8. long long 也不够了用 __int128,或手写高精
  9. vector 最好不要直接排序,复杂度高,可以用索引来排序。
  10. 注意算术优先级(加括号)!
  11. 交互题记得输出后要清空fflush(stdout);),并且不要用 ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); 来加速 cincout
  12. 数组越界要特判,比如下标从 0 0 0 开始时 i-1 要特判一下。
  13. 循环边界想清楚再写。
  14. 图论时的输入有时从下标 2 2 2 开始读入。
  15. 二分边界不要判错。
  16. 二分时 l + r l+r l+r 若超出 long long 范围,可以用 m i d = l + ( r − l ) / 2 mid =l+(r-l)/2 mid=l+(rl)/2 来写。
  17. cf 的题不要unordered_map,只能用 map,因为有些大佬卡掉了 unordered_map
  18. 提交时记得删去调试信息!

debug 部分:

  1. 样例输入不了,可能是 Dev-C++ 死机了,可以打开 洛谷在线 IDE 或其他网站来写。
  2. 如果用了 while(cin>>n) 之类的输入,程序运行无法终止。如果输入的类型是整数,常用的办法是换行后输入 \ 或者什么字母,这样输入就会停止了,并且有输出。或者在循环中特判 n n n − 1 -1 1 时结束,自己手动输入 − 1 -1 1 即可。提交时记得删去
  3. 没有输出,可能是死循环了。把 ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); 注释掉,之后在递归里输出每次的值。
  4. dp 值不对,可以将 dp 的表格打印出来。

算法选择:

数据范围:

  1. n ≤ 10 n \le 10 n10 时,考虑暴力搜索状压 dp
  2. n ≤ 20 n \le 20 n20 时,考虑 meet in the middle状压 dp 优化
  3. n ≤ 1 0 2 n \le 10^2 n102 时,考虑dp
  4. n ≤ 1 0 3 n \le 10^3 n103 时,考虑暴力枚举
  5. n ≤ 1 0 5 n \le 10^5 n105 时,考虑贪心
  6. n ≤ 1 0 9 n \le 10^9 n109 时,考虑二分数学
  7. n ≤ 1 0 18 n \le 10^{18} n1018 时,考虑数学

题目描述:

  1. 最大值最小(最小值最大):二分、贪心。
  2. 最大得分和最小得分:贪心、dp
  3. 修改、求区间最大值:线段树、前缀和。

本篇文章均由本人经验总结而出,持续更新!

感谢大家的支持~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值