PKUSC 2022 游寄
Day0
为什么要准备这么多东西啊~!
晚上直接开摆!
Day1
时间很阴间,\(1:00 - 5:00\),\(\rm 4h\) 就离谱。
考前,随机数告诉我今天的开题顺序为 \(\rm ACB\),于是准备以这个顺序开题。
先看 \(A\),发现可做只有一个号的,但是题目是两个号/kk。
然后推一推,想了半天,发现可以考虑每次大号被小号刷新的期望步数,然后再套一个 DP + 高斯消元,又推了推半天(回忆)的一个号的 \(\mathcal O(nm^2)\) 的高斯消元怎么搞,总复杂度为 \(\mathcal O(n^2m^2)\),不过不管了,直接开写!然后有了 \(69\) 分。
接着想了想 BC,发现没有什么很多思路,于是又回来想一想 A,仔细观察了代码,发现只有第一次高斯消元是需要的,后面的系数直接继承前面的就行了,于是成了 \(\mathcal O(nm^2)\) 的了,可以过,于是在 \(15:03\) 分左右有了 \(100\) 分。(虽然写丑了,成了 \(\mathcal O(nm^2+n^2m)\) 的了,但是不想改了,能过就行!)
根据随机数的结论,我应该开 C,于是打完 B 的暴力,直接干 C!
结果还是不会……推了推 \(n = 2\) 的式子,准备摆烂。
结果在上厕所的时候想到了这是一个匹配!直接 Hall 定理!
为了保险起见,直接写了二分+暴力枚举子集的 \(\mathcal O(2^{2n}\log V)\) 的 Hall 定理,然后发现 AC 了 subtask 1,3,结果 subtask2 没有过/kk,于是一直以为啥错了,对着暴力一顿乱卡,一直没过,自闭了/kk。
最后 \(100+18+22 = 140\) 收场。
后来发现 U 群里说 C 的 Hall 定理就是正解?!
后来和热心网友讨论了一下,据说他看了几个 Hall 定理过了的和没过的代码,然后发现两种本质相同的写法似乎只有一个能过?
db vtot = 0;
rep(t, 0, U) if(t & s) vtot += p[t];
db vtot = 1;
rep(t, 0, U) if((t & s) == 0) vtot -= p[t];
就是两种求法,似乎上面的会寄,但是下面的没事?
离谱!
Day2
随机数告诉我今天开题顺序是 \(\rm BAC\)。
看 B,感觉这个条件和 JOISC 的某个题目很像!那个题目是点分治+队列去算所有答案,但是求的是最小;
然后想了想,搞了一个点分治+换根DP下传标记+一堆讨论查找答案的奇怪写法。
结果萎了,开了对拍,发现有好多地方都不对。
拍炸了 \(\infty\) 组,用了差不多 \(3h\),越写越长,但是终于调对了,结果代码写了 \(9k\)(带调试),然而有一个地方时间复杂度萎了/kk。
这个时候还是只有 B 的暴力分,于是很自闭。然后加了点乱搞成分,有了链的分,又乱搞了一下,又有了 \(m = 1\) 的分,于是有了 \(60\) 分,总比没打好,赶紧跑路打暴力。
A 感觉可以拆分数,但是发现自己的拆分数做法 \(\rm naive\) 了,于是只好暴力 \(6\) 分跑路/kk。
C 感觉规则很麻烦,只有 \(20\) 分钟左右了,感觉打不出来,于是继续卡一卡 B 的神秘乱搞,企图艹过最后一个 Subtask,结果还是失败告终。
于是只有 \(6+60+0 = 66\) 分,自闭了。
然后发现其实 C 可做?!早知道就开 C 了。/kk
讲题的时候发现其实 B 可以随机 \(\rm xor\),为什么我这个都不记得了/kk,通过随机数获得开题顺序,然后考试的时候忘了有随机数这个玩意儿?
感觉今天的随机数没有昨天好用。毕竟昨天随机数直接告诉了我正确的题目顺序/kk。
讲题的时候发现 Day1C 会重测,然而我因为暴力没过,于是没有写正解/kk,但还是多了一点分/cy。
总结
- Day1C 被卡精度是没有办法的,无语了。
被精度区分了,不然就有正解了。 - 但是 Day2 没有开对题,B 应该想一想,多玩一些小样例再开写的,毕竟还是没有预料到这个写法这么麻烦,
本来只有 4k 多的,结果越调越长,还是没有准确的预估。 - Day2 的 C 实际上是一个爆搜+大模拟,只要理清了规则,还是比较可做的,但是因为 B 的失误导致没干这个题目。
可能随机数的好处是帮我避开了 Day2A 这种题目。不过根据随机数开题真的图一乐,比赛的时候大概率是顺序开题的,因此要结合随机数根据题目难度灵活调整开题顺序。