ZJOI 2022 游记--zhengjun

前言

ZJOI 王朝复辟???。。。

这次比赛在 5 月 3 号和 4 号,由于 qz 教育局什么五一不调休,正常放完双休回来,刚好比赛的两天就是周二周三,还做好了回来隔离半个月的心理准备,这两天算不了什么。

day0

比赛前一天下午 1 点半出发,坐的小(mian)巴(bao)车(che),虽然只坐了 2h 不到,但是腰被安全带勒得酸麻了(这个安全带拉开后只能收紧不能放松,差评!),然后车程刚好可以让我和 fls 看一部电影,选了忍者神龟,很快就到了 yw,先到了酒店放下东西,然后立刻去 ywzx 试机。

到了试机的地方,就先检查了键盘每个键都是好用的,然后随手写了个 A+B Problem,感觉键盘蛮不错的(至少比 qzez 的键盘好),然后考虑了一下赛时用什么软件,顺便看到了 FLY 也时监考老师 /se,就把 FLY 辛辛苦苦找来的 Windows 版本的 g++ 9.3.0 贺过来了(我之前也找过,没找到,这波血赚),最后看到其他人都是直接 FFT 或者其他的大数据结构来练手,我感觉我 A+B 就有点寒掺了。

回到酒店,晚饭有亿点点辣,再加上有点热,说不出来是咬到舌头了还是辣和热的痛觉,吃不下去了,去其他同学房间想蹭个不辣的菜,结果不是菜更辣就是吃完了,于是就先看了会手机准备凉下再吃。

晚上也就和 fls 放松了一下,愉快的睡了(虽然开始有点热,起来调了下空调,但还是睡得蛮舒服的)。

day1

早上六点半起来,下楼吃早餐,早餐很好,吃得很舒服。

然后就去了 ywzx 的四楼机房,依旧是 FLY 和其他几个老师在监考,这个压缩包的密码确实厉害,ZJ0l,还是老师手写的,0 和 O、I 和 l 分不清,直到老师打在大屏幕上才解压出来,服了服了。

开题直接开幕雷击,一看到三道 1024MB,时限分别是 2s、4s、5s,无语了,所有出题人全不是不怀好意的啊,心心念念的送分题没了 /ll。

开 T1,什么奇葩计数题,想了 \(20min\) 只想到 \(O(n\times 2^n)\) 的暴力,只有 \(20pts\),算了算了,差不多得了。

然后开 T2,觉得这是一道什么脑洞题,发现可以拿 \(40pts\),毫不犹豫,我才不想正解呢(其实是我想不出来罢了)!直接开始写暴力。

此时过了 2h,开 T3,发现这道题的特殊性质是一点不懂,然后又半毛钱也没有推出来,自己只会一棵树的分,TMD 怎么只有 \(10pts\),哎,\(10\) 分也是分,打了再说。

打完 T3 暴力的时候还剩下 \(2h\),觉得 T1 好像应该可以搞个多项式复杂度的算法,可能可以拿更多的分,然后就设了 \(f_{i,j,k,l,g}\) 表示 \(i\) 个节点,在第一棵树中有 \(j\) 个叶子节点和 \(k\) 个还没有连接儿子的非叶子节点,在第二棵树中没有连接父亲节点的叶子节点有 \(l\) 个、非叶子节点有 \(g\) 个,然后转移是 \(O(n^2)\) 的,所以总复杂度是 \(O(n^7)\),傻眼了,不仅要滚动数组,而且一分没有。

但是还是先打出来准备待会优化,然后发现可以排除一些无用状态,这样本地开 O2 可以跑到 \(n=40\) 的点,结果看了看,什么鬼东西,出题人什么丧心病狂的魔鬼,还是 \(20pts\),结果优化来优化去,想着前缀和优化转移,结果发现还有个组合数在哪里搞不掉,索性开始卡常(因为 \(n=50\) 的点要跑 \(8s\),甚至想去用 python 打表,可是想想时间不多了,等会 python 不会调试,直接放弃)。

结果卡了半天的常数还是只能过 \(n=40\) 的点,弃了弃了,现在离结束只有 1h 了,所以直接再看看 T3,突然发现还有个简化版的仙人掌是可以用 tarjan 缩点然后 LCA+差分的,于是花了 30min 写完调完走人了。

再也不想见到 T1 这种**的题目了,20min 可以得 \(20pts\)\(2h\) 甚至也可以得 \(20pts\),如此 liang 心的出题人,难得难得。

考完之后还要写一坨什么 md5 加密的东西,真无语。

顺带提一句,考试的时候肚子有点不舒服,说不上很痛,但是就很难受,真是老天都不想让我考好。

下午回到酒店,洗洗衣物,做好再多呆 3 天的准备,然后水了水群消息,吐槽了一下 FJOI,然后和 fls 玩脑力游戏,不过有些东西确实挺妙的。

最后晚饭比昨天好多了,至少没有特别辣,但我还是等到了完全凉了吃几口缓一缓,直到 9 点才吃完,之间从七八点开始和 fls 打篮球,蛮有趣的。

差不多也就洗洗睡了。

day2

早上 6:40 老叶突然发消息让我们收拾好东西,下午就要回 qz 了,除了艹字没话讲。

到了考场这个密码很好,什么 Cc!FN0I,特派员挺会想密码的。

比赛开始先开 T1,暴力竟然有 \(10pts\),这么liang心,然后先花了十分钟写完了暴力,以为无论 \(n\) 是多少,最后都会变成全部一样的,结果发现样例直接一个反例,然后看到了 \(n=2^k\) 的点,好像这个就是会变成一样的了,于是暴力改了几个字符,多了 \(5pts\)

接着开了 T2,发现对于我这种低人亿等的代码能力十分难打出来,于是打了个暴力中的暴力,就是先处理出所有符合条件的点,然后把相邻的点两两连边,然后直接 dfs 枚举每个点是否要选,加一些剪枝,结果只能跑过去 \(a,b,c\le2\) 的点,甚至没有半分。

然后想了想 \(a\le3\) 的点好像可以状压 dp,然后状态一设,转移方程式一列,发现转移是 \(O(2^{2\times(4\times a-1)})\) 的(后来想想发现其实有很多转移都是不合法的,是不是合法的转移个数很少呢?也许吧),直接爆炸,然后开着暴力让暴力慢慢跑。

接着开了 T3,然后尝试推了一下期望,但是有个什么 sb 的最小值的期望,我还不能用最小值的期望与另一个最小值的期望进行转移,做屁啊,直接看部分分。看到有菊花图,想了想,不会,又看到有一条链,这我会了!期望等于没有,直接单调栈就完事了,花了 \(30min\) 打完之后,发现样例的第二个数据怎么都过不了,想了想,发现如果 \(root\) 不在链的两端的话,就会在两边把 \(f(root,root)\) 都算一遍,于是减掉就好了,随便手捏了两组小数据,看看没啥问题,走人,什么万一哪里没有取模爆掉了我也不管了,反正已经炸了,这 \(5pts\) 不算什么。

此时离考试结束仍有 \(2h\),回去干 T1,准备写个矩阵乘法可以得 \(5pts\),可惜当时没有想到可以预处理出这个矩阵的 \(2^i\) 的幂是多少,然后用初始向量去乘一下,就能把复杂度从 \(O(n^3\times q\times\log k)\) 降到 \(O(n^2\times q\times \log k)\),就有 \(30pts\) 了。可是这些只是考后才发现的。当时我就推了一下,发现其实没有必要开 \(n\times n\) 的矩阵,完全可以考虑一下把 \(n\) 拆分成 \(2^x\times y+2^{x-1}\) 的形式,就是前面一坨都是 \(2^x\) 个连续一样的,最后落下一个 \(2^{x-1}\) 个,然后不管拉多少次面,仍然是这种形式,于是我就优化了一下刚刚的矩阵乘法,可以过 \(\sum n\le150\) 的点,但是 \(\sum n\le500\) 的点我可以把我卡到 \(25s\),但是有可能造数据的人不会想我一样直接一组数据 \(n=498\),把我的矩阵大小卡到最大,说不定能骗几分。

花了 \(50min\) 写完之后,看到了还有 \(n=98304\) 的点,分解了一下质因数,发现用我刚刚的方法,矩阵大小就是 \(2\),然后就能过了,于是改了改,似乎又可以拿 \(5pts\) 了,结果随便捏了组数据,发现跑不出来,想了半天知道了是因为我矩阵大小开太大了,导致跑的很慢,于是我就把我所有的矩阵都卡到最小使我的程序跑的快一点。

现在还有 \(30min\),我先查了一下我 T1 的每个部分分有没有写错,突然发现我的 \(\sum n\le50,\sum q\le50\) 的最原始的矩阵乘法输出了个负数,我看呆了,每一步运算都转了 long long 并且取模过了,但就愣是输出负数(赛后 fls 帮我开打了一下矩阵里数组的大小然后就没输出负数了,我谔谔,难道开 \(51\) 不够吗),直到还剩下 \(5min\),心态炸了,不管了,直接把这个部分分注释掉,用下面的优化过的(赛后看看似乎没有输出负数,真是惊险)。

回去的时候和 fls 看了绝杀慕尼黑,这种篮球赛想想就是开始领先,然后最后一个失误使对手反超一分,留下来几秒钟时间绝杀掉去,虽然完美猜中结局情节,但是这部电影确实十分优秀,推荐一下。

后记

最终估分:
day1:\(20+40+40=100\)
day2:\(35+0+5=40\)
实际得分:
day1:\(20+40+10=70\)
day2:\(40+0+0=40\)

加上 NOIP 2021 自己走了狗屎运的 \(284pts\)(见 NOIP 2021 游记--zhengjun),如果 Day2 的标准分算初中生神犇 zky 的 \(140pts\) 的话,我的标准分是 \(440\),如果不算的话,我是 \(450\) 分。(貌似离队线就差了 NOIP T3 的正解加上 NOIP T4 的暴力加上 Day1 T3 的环套树的部分分加上 Day2 T2 \(a\le3\)\(30pts\) 的部分分以及 Day2 T3 写挂了的那 \(5pts\)?)

分析:Day1T3 的环套树的部分分写挂了,fls 好像也挂了,直接没掉 \(30pts\),Day2T1 的优化过的算法跑过了一个 \(\sum n\le500\) 的点,可是 Day2T3 的 \(deg\) 数组没有清空,导致在链的部分分中只有第一组数据输出正确的答案,其余的都输出 \(0\)。/ll

目标:不垫底,考到 fls 总分的 \(30\%\),优势在我,椰树牌椰汁保佑我!

希望明天我正式参加省选的时候不要 ZJOI 了啊啊啊啊啊啊,我要打联合省选!

总结一下这两天,当了 \(9h\) 的暴力人,从来没有考虑过正解,还好没有这么做,遗憾的是 FLY 还是很忙,没有找机会把 fls 的 lg 本子要来,或许可以让 FLY 出钱从 yw 邮寄到 qz。(((

最好来个什么 NOIP 标准分 400,day1 标准分 300,day2 标准分 300,反正我已经寄了,这样就可以让我和 fls 的分差稍微少亿点点了。/kk

但愿明年省选能良心一点吧。

posted @ 2022-06-11 15:35  A_zjzj  阅读(57)  评论(0编辑  收藏  举报