金牌选手的做题技巧

金牌选手的做题技巧

来自10circle


  • /usr/bin/time -v test:测试程序 test 的具体时间、峰值空间。注意这是不算未使用的静态空间的。
  • 小心 \(n\)\(m\) 写反。
  • 注意数组不要开小或开大。
  • 注意计算变量范围,不要能到 long long 的变量开 int
  • 感觉容易挂的地方写 assert
  • 感觉容易写挂的、样例很弱的题一定要写对拍。
  • 注意模数是不是质数。
  • 注意操作的顺序。
  • 认真读题,模拟完样例再写程序。
  • 注意清空数组。
  • 相信所有题都是可做的。
  • 感觉不可做的,有较高多项式复杂度暴力的题,思考:分治、贪心、dp、线段树。
  • 感觉不可做的,只有指数级复杂度暴力的最优化题,思考:贪心、dp、流和割、暴搜加优化。
  • 感觉不可做的,只有指数级暴力的数数题,思考:dp、行列式、暴搜加优化、拉格朗日插值、容斥、造自动机。
  • 构造、交互题,考虑:增量法、分治、暴搜策略。
  • dp 优化:凸优化(wqs)、斜率优化,决策单调性、交换状态和值域、减少状态(包含常数上的)。
  • 感觉不可做的题,考虑各个元素/集合之间有什么关系。
  • 就算过了样例,感觉没问题也要仔细分析一下各种情况,必要时对拍。
  • 你家分段函数用 map 存?vector 比这常数小多了。
  • 做题别急。
  • 卡常小技巧:vector 建图特别慢,换成手写链表会快很多;对着代码优化的时候,把语句写成更简洁的形式,写成能循环展开的形式。尽力减少状态和转移数量。
  • 卡询问次数时可以考虑 dp 求出最优询问次数,而非直接构造策略。
  • -fsanitize=undefined 在函数参数为 int 但传入一个大于 int 范围时不会报错。可以使用 -Wconversion 并查看编译警告。
  • -fsanitize=undefined 对 char 的溢出不会报错。
  • 任何 \(n\) 较大的,可以快速算单项的东西考虑分段打表。
  • 子区间问题有时候可以类似最大子段和的使用线段树维护,也可能分治。
posted @ 2025-02-20 20:59  Luke_li  阅读(20)  评论(0)    收藏  举报