Skip to content

常见问题

做题

  • 仔细看题,不要看漏看错看反
  • 注意条件与数据,思考时间复杂度与猜测算法
  • 尝试转化问题为相似已知问题
  • 尝试多手玩/打表,找性质与规律
  • 没思路时,多想什么题目条件没用上
  • 尝试构造一些常见的性质,比如单调性
  • 也从暴力枚举开始思考优化
  • 或者正难则反
  • 或者从简化版的题目开始思考
  • 或者思考贡献

通用

  • 小心符号优先级导致的错误,比如左移右移的优先级
  • 比赛写题的时候不要太悠闲,紧绷一点,打字不要慢慢的打
  • 注意赛制,是OI/IOI/ACM?
  • 别卡题,及时换题不用急
  • 跟榜开是最稳妥的,但不要没事老看榜
  • 遇到没有思路的问题,多利用题目的条件,转化问题,可以从暴力枚举开始思考优化

Python

  • 浮点高精度是有限的,请用decimal
  • 模拟题算时间不要用time,用datetime
  • 记忆化容易给卡,最好转为递推的dp(数位dp等特殊情况除外)
  • input可能会被卡TLE,请使用sys或者input=lambda: sys.stdin.readline().rstrip('\r\n')
  • pypy比cpython会快,但是内存小很多
  • 不知道为什么import pypyjit;pypyjit.set_param('max_unroll_recursion=-1')可能会T
  • 注意多维数组浅拷贝导致的错误
  • 虽然自带高精度可以不用分步取模,但是高精运算慢,容易T,最好每步也都取模
  • python大部分传入参数都是左闭右开的
  • python的class比较慢,最好不使用或者加入__slots__等优化
  • 注意python的版本,有没有cache,bit_length
  • 开定长数组可能比较慢(?)

C++

  • 一半的WA很可能是因为忘记开long long,所以请#define int long long,然后用signed main()
  • 数组开定长,尽量不要动态开
  • 不用endl,因为会刷新缓冲区,可能会被卡常,如果喜欢用endl,推荐先#define endl '\n'
  • cin+ios后不一定比scanf慢,但是记得ios后输入输出不要混用
  • 数组开太大也可能导致Segment default

杂项

  • 高精可以转py
  • 检查dfs的时候从树的角度思考

网站基于vitepress主题open17💙