考试总结

2.28-3.6

本周进行了 \(4\) 场模拟赛(\(1\) 场是自己出题未参考),出现了非常多的失误,在距离省选不到一个月的情况下是非常不应该的,因此在此进行总结以吸取教训。

3.1

  • T1:正常通过
  • T2:猜到了答案与环长的 \(lcm/gcd\) 有关,但不会求所有环长的 \(gcd\),是没有见过的套路,需要多多积累。
  • T3:一道较为难写的数据结构题目,由于在T2上花费了太多时间没能写完,还是代码能力不够,并且开写的时候有点心急,许多细节没想清楚,写得一半发现又要再加一棵线段树。但及时止损拿到了大量部分分还是可以接受的。

3.4

  • T1:一道构造题,想了一个贪心但证明证错了,误以为是正确的,实则还需要再对特殊情况是用另一种方法处理,还是没有想清楚。
  • T2:较简单的数学题,但是因为自己的 \(SB\) :本来开了 \(2000*2000\) 的数组,再加入多项式后多项式的数组要开到 \(8000\),于是就将全局变量直接改成了 \(8000\),于是开出了 \(8000*8000\) 的数组喜提 \(MLE\)。这一问题非常低级,以后在模拟赛/正式比赛考试交卷一定要腾出 \(5\) 分钟时间检查自己程序的空间、是否输出了调试信息、是否开了文件等等。
  • T3:较难的字符串题目,没有想到关键转化,只能暴力跑路。

3.5

  • T1:又是构造题,花费了很长时间在 T1 上想出了一个分数较高的构造,但因为非常自信,没有写 \(checker\),自己看了看输出就觉得没问题,实际上写个 \(checker\) 就会发现输出的答案有一小部分是错误的。事实证明不要贪写 \(checker\)/对拍的时间,它其实不需要多少时间,却可能让分数提高许多。
  • T2:没有及时意识到可以判断答案是否合法(主要原因还是 T1 花费时间过长),意识到之后写了暴力也花了不少时间,在考试策略上出了较大的问题。
  • T3:正解极其难写,暴力跑路。

3.7-3.13

3.7

  • T1:想到了多项式的思路,但没能够进一步做下去,对于多项式的线性递推、插值等技巧比较不熟练。最终还因为特殊情况判错掉了一些分,以后在交题前一定要检查自己的特判有没有写挂,会不会输出多余的数。
  • T2:非常妙的贪心题,只想到一个假做法。还是没能抓住这题的关键性质,在思考的时候有些急躁,想了一个做法后没有仔细想证明就开写,写完了过不了拍,然后发现做法假掉了,浪费了不少时间,心态也被搞崩了。
  • T3:一直到最后都没有看对题意,题面本身写得很奇怪,自己也没有想过去问出题人问清楚题意。

3.8

  • T2:发现了关键性质,没有找到最后一步优化的关键。对于这种关于子集的问题,\(meet\ in\ middle\) 是一个非常常用的方法,一定要首先想到。
  • T3:对于线性基等线性代数的技巧掌握得很不透彻,对于可撤销并查集等较深内容不太理解,对于高斯消元、方程解的判断等较基础内容不太熟练,本周重新总结了一番。

3.10

  • T2:非常巧妙的数据结构题,抓住了重心的关键性质:子树大小严格大于总数的一半,而自己则完全被带偏想着分析修改对重心偏移的影响。由此看见待修改的数据结构题,可能是对 \(\mathcal O(n)\) 的静态问题出发,分析修改对答案的影响;也可能是静态问题就可以做到 \(poly\ log\) 的较优复杂度。

3.11

  • T2:想到了 \(\mathcal O(n^3)\) 的 DP,没有想到由于最优解满足特殊性质可以直接干掉一维状态。事实上对于 DP 状态的优化,我几乎都着眼于转移过程中的优化,实际上抓住答案的性质进行优化也是一条可行之路。
  • T3:再一次被自己带偏,误以为操作数非常多,只能分析答案的性质,一心想着从判断答案能否取到的方向出发,却没有想到暴力模拟过程。信息学竞赛中,走偏路是很正常的,但关键是要及时发现这条路走不通,然后赶紧换路,快速试错的能力是非常重要的,这需要自己对各种解题方向都了如指掌,并且在做题过程中保持清醒才行。

3.14-3.20

3.14

  • T3:非常玄妙的树形 \(dp\) 方法,分别记录点 \(u\) 可选可不选时的答案,以及强制要求 \(u\) 被选对答案造成的变化。这一思路比较新奇,以前都没有想过。

3.15

  • T3:想到了二分+点分治+主席树进行判断,但在超大的值域面前只会直接二分,没有想到还可以进行随机二分,利用值域很大但合法点只有 \(\mathcal O(n^2)\) 的性质,随机二分复杂度依然是正确的。

3.17

  • T2:一开始找到了正确的估价函数,但是因为判断方法写错而误认为这一估价函数不优,自己去想复杂得多的奇怪的拟合后的值作为估价函数,把问题想复杂了。明明理论分析得挺好的,实现时却实现的与理论不匹配,反过来认为理论分析是错的,主要问题还是写题的时候没有注意细节,出现问题时也要保持冷静,仔细核对究竟是算法的错误还是实现的错误。
  • T3:大数据结构题,由于在 T2 上花费时间太多而没时间写了。

3.18

  • T3:想到了 \(\mathcal O(n^2)\) DP,但没有想到分治这一选项,直接规避了特殊的转移,进而用卷积实现转移。优化 DP 的方法有很多种,当出现特殊转移无法直接优化时,尤其是在特殊转移只发生正在某一维为 \(0\) 时,可以考虑分治直接规避这一转移。

3.19

  • T2:较为复杂的数据结构题,最后因为将一处 \(x\) 打成 \(y\) 而失去 \(20\) 分。写了对拍程序但没有拍出这一小错误,解决方法也只有写题时仔细仔细再仔细,以及对拍刻意造一些两类数据差异较大,可以应对打反字母情况的数据。
  • T3:考场上思考时间较少,实际上至少 \(m=1\) 时使用单调栈维护应该是比较容易想到的,但个人对此不太熟悉。接下来就是维护一个类似单调栈但维护的是前 \(m\) 大的数的结构,比较有启发性。

3.21-3.27

3.21

JOISC2022 Day 2

  • T2:神秘的通信题,非常考验思维能力,找不到方向非常难做,而且想着想着就被自己扰乱,越想越急,这绝不是一个好的现象,考试时遇到难题很正常,千万不能过于急躁,因为他人快速通过急躁,反而打乱自己的节奏。

3.22

JOISC2022 Day 3

  • T1:又是通信题,这次的处理还算不错,没有较好的思路后,果断转向暴力,没有花费太多时间,但可以看出自己的脑洞确实不够,大家都想不出正解,但是各有各的乱搞方法,有的能达到 60-80 分,做这种题目就是不太被常规思想束缚,要放开思路,随机、贪心等等都可以考虑。
  • T3:在发现是一道网络流后,没有抓住这个思路继续往下想转化为最小割后 DP;而是在发现可以贪心后将目光集中在贪心上没能走出来。网络流的经典转化:最大流与最小割的互相转化,以及对偶图、线性规划都是需要注意的重要方法。

3.23

JOISC2022 Day 4

  • T2:对于题目的特殊部分把握的不够好,将问题转化为笛卡尔树上 DP 后专注于笛卡尔树,实际上本题的特殊让这个笛卡尔树不可以不需要显式的维护出来,而只需要用一棵线段树维护所有的合法区间就可以了,在做题时对这样的特殊性质一定要非常留意。

  • T3:一直在从询问的角度考虑,思考随着 \(x\) 的变化,最小边的变化是怎样的,最后陷入怪圈;事实上应该从边的角度出发,思考每条边会在那些 \(x\) 下出现在最小生成树中,这种自变量与因变量的转化有时难以考虑但却非常关键。

3.25

NOI ONLINE

  • T2:想到了将所有人按题数从大到小排序之后,依次对每个人快速判断之前的人中是否有人与其相交但不包含它,但对于包含这一信息错误地将其转化为了一个必要不充分条件,主要问题在于思考问题时不够严谨,因为一直无法找到体现包含地必要条件,想到了这一转化之后就过于激动,以至于忘记了还要考虑充分条件。实际上只要冷静一下,代码改一个字母就能正确。一个好的解决方法是在检查时重新将解题思路顺一遍,看是否有逻辑漏洞。

3.28-4.3

3.28

对于经典的斜率优化 \(DP\) 掌握的不够熟练,主要原因在于学斜率优化时觉得其比较绕,在学会了李超树之后认为后者可以完全替代前者而忽视了前者。实际上李超树应用面确实比斜率优化 \(DP\) 更广泛,但斜率优化可以在询问的斜率单增时做到复杂度线性,优于李超树,并且实际上是好写好懂的。本周重新掌握了斜率优化 \(DP\)

3.29

自己写在备忘录里的第一条:高斯消元在无法使用在无法使用逆元时可以用辗转相除法消元忘记了。自己搞出了神必的最大匹配做法。具体思路就是在用第 \(i\) 行消第 \(j\) 行的第 \(i\) 个变量时,可以不断与二者中较大的整体模上较小的,然后再交换。这些重要的小知识点在省选前一定要仔细看一遍。

3.30

在单次比较复杂度与比较的对象有关,称为 \(f(x)\);而数据范围只保证了所有比较对象的 \(f(x)\) 之和时;考虑先 \(shuffle\)\(sort\) 或者使用 \(stable\_sort\),可以让每个对象被比较的次数都接近 \(\mathcal O(\log n)\)

4.1

在问题涉及到对区间的翻转/加减等操作时,可以考察序列的差分或前缀和,更进一步还可以考虑差分/前缀和的变化图像,画出图像可能会大大方便解题。

4.3

同一个问题,在权值是边权还是点权时,很多时候都可以将一个做法拓展到另一个上;但有时也可能会变成两个完全不同的问题,不能先入为主,因为边权是考察环,就自动代入点权也是考虑环了,要仔细抓关于点的性质,事实上对于点来说,每条无向边都是一个环,正解是考虑每条边。

4.4-4.10

4.6

想到了正确的贪心方法,但是由于距离考试结束仅剩 \(20\) 分钟,最后写的比较急,写的时候没有考虑清楚所有情况,但还是通过了样例就很离谱。想到了正解后,即使此时时间已经所剩无几,也一定要理清所有细节在开写,不然可能会花费比此多得多的时间。

4.7

对于模拟费用流的 \(T3\) 完全没有想到网络流上去,主要原因在于看到数据范围后就下意识地排除了网络流,而专心思考 \(dp\) 以及优化 \(dp\) 的方向。实际上很多有神秘限制的题,以及涉及到两两配对等元素的题目,网络流是一个需要被注意的选项。(当然这些情况很多时候也是 \(dp\),不能惯性思维)

4.8

T1是一道有意思的构造题,很容易想到这样的问题可以通过对小数据爆搜出答案后得到大数据的规律。但我在考场上却因为感觉搜索非常难写,而放弃搜索选择手玩,而实际上情况非常复杂手玩很难考虑清楚,并且搜索其实也不是非常难写,纯粹是被自己吓退了。有时候因为觉得很难写而放弃但实际上不难写;有时候又感觉不难写大胆尝试但实际上很难写(NOIP),问题处在了对题目难度以及码量的评判上,可能还在于此时另一道题的情况(今天的考试中的 \(T3\) 看起来很好优化到 \(80\) 分,而 \(NOIP\)\(T3\) 当时毫无思路)。

4.24-5.1

快进到NOI前考试总结了。

4.24

  • T1实现了复杂度可以通过的分块算法,但是由于是对序列分块且在线而带上了巨大常数。事实上虽然有时时间复杂度没有改变,但变换在线为离线通常可以带来空间复杂度的优化,以及常数上的优化且往往更写,在开始实现时注意。而对序列分块与对操作分块各有优劣,需要在实现前仔细考虑选择更优的方案。
  • 在面对最优化问题时,即使用某种方法会导致算重/或者将某函数的值判定为更小或更大的值,但只要正确的值被考虑到了,且错误计算不会比正确计算答案更优,就仍然可以使用这种方法。

4.26

  • 对于加边使得图合法的问题,一般先考虑如何对一个确定的图进行判定(通常判定是对每个连通块独立的),接下来再考察对连通块与连通块的合并的性质,很多情况下的性质都是最终会将合法连通块接在不合法连通块上使其合法,在用这个合法连通块继续接别的连通块,此时就可以对每个不合法连通块 \(dp\) 其需要接连通块的情况了。

4.27

  • 正难则反的另一种思路,当给出的元素只有 \(0/1\) 两种状态,且要对 \(0\) 状态的元素进行计数时,可以考虑是否可以转化为对 \(1\) 状态元素计算。
  • 在考察限制对元素的影响时,有时会由于限制过于复杂而导致讨论情况太多,这时可以通过写暴力程序打表观察性质,排除一些讨论,并且优化一些讨论。

4.29

  • 当暴力做法是对树上的每条路径分别 \(dp\) 时,可以在树上对所有路径同时 \(dp\),只需要额外记录当前的左右端点是否已经封口即可。
  • 对三元环/四元环的计数有所忘记。

4.30

  • 求解「连通块数量」问题时,如果所连的边相当于对端点编号在数位上进行置换时,可以将其转化为等价类问题使用 \(burnside\) 引理解决。

5.9-5.15

5.9 ZJOI D2

自闭了,只会打暴力。

  • T1 实际上已经比较接近正解,想到了进行 \(lowbit\) 次操作后分析得到的数的变换,甚至想到了差分。但因为首算出的和没有规律难以计算而放弃,事后才发现把每个数乘上其出现次数后求和(就是原本的和)一直没有变,问题出在转化了新问题之后就抛弃了原本问题的一些性质,很多时候这个至关重要。
  • 对于坐标系上选点/边的相关问题,画图有时是很好的解决方法。

5.10

  • 直接使用 \(stl\)\(ceil/floor\) 精度误差很大,最好不要使用。如果需要使用可以先用 \(ceil/floor\) 求出答案,手动正负 \(1\) 进行调整。
  • 对网格进行操作,但有的操作无法覆盖到网格所有位置,比如覆盖不到左右边界/上下边界,导致难以处理时,可以考虑将网格沿边界翻折,在新得到的无限网格上操作。

5.12

  • 当数位 \(dp\) 一次转移较多位导致复杂度较高时,可以考虑观察性质以减少位数。
  • 一类经典交互题:交互库有一些不确定的物品,要通过一些操作将它们变成特定的状态(指对所有数据都相同的状态)。对此可以将所有初始状态分类,逐个处理每个状态,在不影响其他状态的情况下转化为目标状态,然后自己也加入目标状态之中。

5.14 THUPC

由于最近考的太差,考试总结重启了/kel。

7.4

  • T1 在想到了基于二分的 \(\mathcal O(n\log^2 n)\) 做法后就一直在向如何在其基础上进行优化。但最终的做法确实从另一个方向,处理有关区间最大值问题的利器——笛卡尔树入手,对这一方面的知识有所忘记了。
  • T3 所求只是一个二次不等式问题,却因为怕麻烦加上没有分析清楚问题直接写了二分法,多带了一个 \(log\),反而导致在卡常上浪费了太多时间。
  • 注意 \(fmod\) 等一些 \(stl\) 函数的精度误差比较大,最后手动实现,在这上面又花去了不少调试的时间。
posted @ 2022-04-05 16:01  cjTQX  阅读(302)  评论(0编辑  收藏  举报