金牌选手的做题技巧
金牌选手的做题技巧
来自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\) 较大的,可以快速算单项的东西考虑分段打表。
- 子区间问题有时候可以类似最大子段和的使用线段树维护,也可能分治。

浙公网安备 33010602011771号