[Other]阶段总结

  • 这里记录一些近期训练中常见的问题。

I

  • 常见的写挂原因

I. 1

  • 某道题,问题经过转化之后,要求支持每个点上维护一个集合,每次加边或者查询某个连通块内所有点对应集合的并集,同时可能有删除操作。

    • 并查集合并时,没有判 find(x) == find(y)

    • 由于是查询并集,故没有判这个东西不会影响正确性,但 (n) 一大就会 TLE

I. 2

  • 一道计数题,先写了一个 DP。调试时发现这个 DP 的结果要乘上一个阶乘。

    • 可这时候是急着去改的,故凭感觉在某一个 if 语句后面加了一个 cnt++,最后把答案乘上 (cnt!)

    • 过了样例。因为是计数题,感觉很稳(再说了,暴力都写不了)

    • 而样例里刚好正确的 (cnt) 和我程序中算出来的假的 (cnt) 是一样的。

  • 类似的错误还有:函数、变量的含义在写代码时搞混掉。

I. 3

  • 一道题,给定一些数,不保证这些数互不相同

    • 算法实现的某一步要把所有的数从小到大排序,相同情况下按原下标从小到大排序。

    • 排序的比较函数忘写第二关键字,大样例貌似所有的数互不相同。

I. 4

  • 某交互题,第一发提交到 OJ 上时得到 CE

  • 一开始以为是开库的原因,于是把 <bits/stdc++.h> 删了

  • 但程序里有个 memset(a, INF, sizeof(a))(实际上只需把 (a[1dots n]) 设为 (infty)

  • 于是把这个 memset 改成了 for (int i = 1; i <= n; i++) a[i] = INF;,没有再测一遍样例。

  • 交上去还是 CE,后来才发现要用 C++11 提交,于是用 C++11 再交了一遍。

    • 可把 memset 改掉时忘了 (n) 是在后面的程序中计算得到的。

    • 也就是说,这时的 (n=0),初始化和没有初始化无区别。

II

  • 常见的策略失误或时间损耗

II. 1

  • 题目中的关键信息在比赛中场甚至最后才看到。

II. 2

  • 仅因为 long long、取模、线段树标记没下传等原因调很久。

II. 3

  • 套路不熟练导致的时间损耗。

II. 4

  • 题目顺序、难题长得像简单题等导致的开题策略错误。

II. 5

  • 也是最重要的:在对拍写过的题和尝试拿更高分之间的选择。

  • 在某些比赛中,这一点处理不好会整场崩盘。

III

  • 缺乏深入思考,导致时间损耗或该拿的分没拿到

III. 1

  • 一有思路就开始码题,码完发现有一大堆没考虑到的细节。

III. 2

  • 一有思路就开始码题,写了一个很麻烦的做法,但如果注意到问题特殊性质则不用那么麻烦。

III. 3

  • 一有思路就开始码题,写了一个很麻烦的做法,最后假了,心态爆炸。

IV

IV. 1

  • Div. 1 有时没有快速进入状态,A 题卡住一段时间。

IV. 2

  • hash 不随机模数被卡。

IV. 3

  • 偶尔难度顺序会不正常。下面两个建议:

    • (1)先开当前 pp 人数最多的题。

    • (2)在 Div. 1 场中,遇到 Div. 2Easy VersionDiv. 1Hard Version 的,谨慎开题。

IV. 4

  • 遇到结论找不到反例但又不会证的题,可以尝试蒙一发交上去。

V

  • 还有很多,就不一一列举了。

  • 只希望省选之前能有突破吧。

原文地址:https://www.cnblogs.com/xyz32768/p/12705499.html