C/C++教程

PKUSC2022游记

本文主要是介绍PKUSC2022游记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

总结:

Day1 略微超常。Day2 被一堆人翻盘了。总体来看就是打寄。

总分 100 + 8 + 0 + 0 + 37 + 25 = 170,注意到我有三题几乎等于没做,长久以来我的比赛策略,是一个很大的问题。

作为初二选手,应该还算优秀的。如果后续有获奖,再更新吧。

Day1:

上来开这三个题,都很迷茫啊。我的定位实质上是 DS 较为出色的,然而 T2 的 DS 完全没有思路。然后看 T3 能否骗点暴力,然后我没读懂题,就先放了放。

T1 事实上是我不太擅长的类型。那么一个想法是上来就 \(n^2\) 个状态暴力地 \(dp\),然后就可以 \(n^6\) 消元了。发现只有 \(11\) 分因此我没有直接敲代码。

思考了一下 \(m=1\) 的情况。我们发现分数的变化是确定的:\((0,0)\rightarrow (1,0) \rightarrow (1,1) \rightarrow ...\)。实质上我们只用算 \(n\) 个状态 \(f(i)\):代表当前有一个账号是 \(i\) 分,一直用这个账号打,最后变成 \(i+1\) 分的期望步数。注意到 \(m=1\),那你列出来一个方程:\(f(i)=w_{-1}f(i-1)+w_{0}f(i)+w_{1}f(i+1)\)。

然后我回忆起来做过的 PKUSC2018 的一道题:随机游走。大致做法是我们可以把 \(f_0\) 写成 \(f_0=k_0 f_1 + b_0\) 的形式。然后考虑递归地去解,就是从把 \(f(i-1)\) 替换为 \(k_{i-1},b_{i-1}\),然后解出\(f(i)=k_i f_{i+1} + b_i\)。这样就能 \(O(n)\) 解出所有状态。

交了一下,发现竟然过了 \(m=1\) 的部分分,非常激动,此时比赛过去了 45min,我决定,本场死磕此题。

到这里就犯了一个浪费我很多时间的错误:我以为是预处理出 \(f(i,j)\) 表示当前有一个账号是 \(i\) 分,一直用它,打到 \(\ge j\) 的期望次数。事实上这个东西是可以 \(nm^2\) 算的,方法和正解其实几乎一样。但是这样其实无法统计答案。导致我浪费了近两个小时在这个错误解法上面。

后来突然领悟到那个 \(f\) 的计算其实可以直接把 \(f\) 替换成 \(dp(i,j)\):就表示一个账号分为 \(i\) 另一个分为 \(j\) 的期望步数。然后直接 \(nm^2\) 地解出所有系数。对于 \(O(n^2)\) 个状态,每个就都能 \(O(m)\) 地计算了。

在还剩近半个小时的时候,我终于通过了此题。

upd:后来发现有用的状态就 \(nm\) 个,所以我感觉我的做法是 \(nm^2\) 的啊,是不是吊打正解了,我不好说。因为听说这题消元方法不少。

然后 T2 T3 就没多少时间,T2 打了个暴力还被卡了精度。T3 几乎没啥时间读题,赛后发现其实读懂题了以后花个半小时就能 100 了。我对 Hall 定理还是挺熟悉的......

赛后交流了一下,发现我打的其实非常不错...... 很多认识的牛逼人都没做出 T1 啊。

Day2

Day2 的发挥和联合省选几乎一样差。

T1 感觉和数数有关,是我最不擅长的,还带了概率。果断 skip。T2 感觉比昨天的清新,很快打了 37pts,到这里我犯了一个错误,以为有效路径数是 \(O(n)\) 级别的,然后浪费了近 2/3 的时间,最后发现是有问题的。赛后发现是 xor-hashing,泪目了,明明自己还和别人普及过这个科技的。

T3 就,我是个雀魂玩家啊,很nm亲切啊!然后一眼有个 dp 做法啊,但我时间不多了,而且算了下远远没跑满,要是最后假了连暴力都莫得。最后瞎jb check了一下拿了 25 分跑路。

赛后花了十分钟理了一下,发现其实 \((27+21)^4\times 27\) 的爆搜 \(4\) 面子 + 雀头,复杂度都是稳的吧...

赛后一交流,果然 T3 成两天最傻逼的题了,成功被翻盘。

感觉上限至少能 \(100+8+12+6+60+100=288\) 的,最后成 \(170\) 了,问题其实挺大的。

我希望这是省选过后我第最后一次 day2 严重失误了。

这篇关于PKUSC2022游记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!