JSOI2022 游记
原标题「JSOI2022 邮寄」,但考虑到其实不寄,就不装了。
原摘要「麻了。」,指赢麻了(确信)。
前情提要:NOIP 略微有一点寄。当时考完觉得炸没了,但那只是当时的错觉。
day -? - ?
由于疫情原因,省选在 nfls 旁边的华山饭店举行,而且用笔记本电脑。但是笔记本外接显示器、鼠标、键盘,那笔记本不就只起到主机的作用吗?那为啥不直接买台式机呢,应该更便宜吧,很是迷惑。
突然得知只能用 noilinux,rnm 退赛!CSP 和 NOIP 只能用 windows,现在搁这又只有 noilinux,这不糊弄鬼吗?还好升级到了 2.0,不然 vim 那玩意用的真是令人发抖。草率学了一下 vscode,配置一键编译啥的就不管了,将就着用吧。。。
day -1 - 2022.4.14
除了颓废什么也不想做😁。
像个寄摆一样。
看了些 loj 轻小说,怎么这么鸽?
day 0 - 2022.4.15
今天没去学校。打了几个板子。
下午去地方试机,还算好用。
祝大家考出好成绩,*** 必胜(确信)。
day 1 - 2022.4.16
今天心情终于好了一点,不然游记就鸽了(天津雾)。
早上又到的很早。
进考场。真的很想用笔记本!垃圾键盘回车多出来一截,把 |、\ 的位置占了。
说 8:20 发题目,但当时我看到已经超过 8:20 了,这不是糊弄鬼吗(你糊弄鬼吗?你这不糊弄鬼吗?)?哦原来是电脑快了 5min,各电脑时间差还不一样,真快乐。
读题。T1 大模拟是吗,那可以骂人吗?T2 看起来很像点分治(笑),但是 n 只有 200,很奇怪。T3 看完不是很有感觉,脑子很乱,像雪糕,像肉饼。
草,不想写 T1。想了一会儿 T2,感觉可以枚举最小点和最大点,和最小值,然后把最小值分成 O(n) 段,求什么一次函数的积什么的,还要套个点分治。tnnd,今天题怎么这么烦?
摸摸基基 30min,想了个寂寞。开写 T1。写了 1h 写完,感觉复杂度不是很对。不管了,应该不会卡,ccf 这人能处。
T2 好像不要点分治。就是套个结果为多项式的 DP 然后插值求前缀和?但好像无论如何都不低于四方,没多少分,摆烂。
卧槽。竟然读错题了??之前以为是差恰好等于 K,结果是不超过 K?不过差分转化一下反而是前者更弱(笑)。
印象中想了好久,似乎想到了 K 减 K - 1,这不就是前几天模拟赛那个连通块容斥 trick 的弱化吗,我还没补 hhh。那不就直接分段,然后跑 O(n) 次多项式 DP 吗,复杂度跟背包 DP 一样,是平方。这样就有 70pts 了,剩下 30 狗都不想。
此时还剩 2h,不过能拿到 70 也是好的,今天看起来有点毒瘤(不确定)。分段的部分有点烦,其他还好。复杂度好像不是背包,还更弱?有点奇怪。写到还剩 40min 调出来了,测了一下我自以为的极限数据——链,0.5s,starfish。
T3 前 8 分状压 DP 狗都不写的好吗?如果会性质 C 就牛逼了,可惜会不得。预想着写掉 A,然后把 B 的 50% 拿掉。可是 A 写不完了,报警啊,你他妈怕什么?有点心疼地把未写完的 A 的 if 里加了 && 0。那就剩 12 了,总共 182 有点寄。
第一个与我交流的是 tzc,他过了 T2 还过了 T3 大样例,我只能说我真的寄了。不过 djq 没切掉 T3?很震撼。出来问了一圈,发现大家好像都没我高,那看来并没有发挥失常,只是 tzc 太强了/bx。
回家发现 T1 与某个人两年前出的题一样,改了一下交上去 WA 了。原来是 \r 的问题,吓得不轻😣。以及 T1 复杂度并没有问题,倒是空串可能会挂。不过好像没人判空串,那有空串的话出题人不是没🐎了吗?
反转了,T2 🐎作的卢飞快。
反转了,T1 空串不会挂,s[0] = '\0'。
反转了,djq T1 挂了。
反转了,T3 其实有 20pts,我以为是 {B} - {A},实际是 {B}。
反转吧,都反转吧,让这世间一切事物统反转尽了呵。
day 2 - 2022.4.17
游记一向写不好,尤其是像今天想写的事情太多太琐碎的的时候。
昨天考的有点好,所以早上做了一些心理建设,试图使得今天不要飘。不过说实话考场上(不仅是 OI)的话我几乎没有飘过,大多都是因为卡题导致的心态爆炸而寄掉。
进考场,遂打了一下 33 行的板子。发题目后瞄了一眼 T1,感觉又是个萌萌莫反题?是不是可以随便切呀/cf🤤。T2 感觉很鬼畜,这个规则需要仔细看才能读懂,就先不管了。T3 也感觉很鬼畜,似乎跟 CSP-S2019 day1T3 那个毒瘤题挺像的。
对题目有了个粗略的印象,但没完全有。那就只能想 T1,毕竟 T1 肯定要做出来吧,不过 T1 你过啥题啊,不过 T1 你打锤子啊?
莫反。注意到是求若干若干集合的交,交也是能容斥成并的。但是好像要求「互质于若干个质数的乘积的数的个数」这种东西,仿佛并不是乘积太大答案就为 0 的,仿佛上不封顶,那真的可做吗?正难则反然后是个正常的容斥,不过好像跟之前的是等价的。哎那我就很好奇,这个题真的可做吗???
不过我一直自诩为数论大师,自然有做出这个题的信心。想了一会儿,感觉不可 polylog,倒是可以有 \(\pi(\sqrt .)\) 的 mask 做法。那是不是就是个 or 卷积?超,转反了,之前听袁神的讲座说绝对不可能考 fwt,这下被反向奶了。不过还好我粗略地学过集合幂级数,这种 sb 东西随便写吧。况且这也不是 fwt,而是 fmt(确信),甚至是容斥、高维前缀和(笃定)。
这个时候比赛开始已经 40min 了,我承认我当时认为对于一个 T1 而言,想这么长时间有点白给。事实上考完发现跟 wjz 相比算快的了(无嘲讽之意)。代码还算好写,到 1.5h 时过了两个小样例。等等,大样例呢?rnm,退钱!
不懂,这么难拍的一个题,为什么还不给大样例?ccf 真是搬起鹅卵石、雨花石、青金石、钻石、萤石、铁矿石、黑曜石、花岗岩、基岩砸自己的脚。算了,先 skip,等后面忙完了干瞪眼(重量级 flag)。测了一下极限数据,跑了 1.4s,对取模进行了进一步卡常变成了 0.8s。这时候大概是 1h40min。
接下来把 T2 和 T3 稍研究了一番。T2 最终要把括号变成啥样,不就是 ((((...))))
吗?不懂整那么复杂干什么,很是迷惑😵。建一棵树,操作二说明子树顺序不重要,操作一就是令 \(\son_a\gets \son_a\cup \son_b\cup\{b\},\son_b\gets\varnothing\),看起来还算比较可做。T3 就不一样了,完全感觉不弱于 CSP2019 的 d1t3 啊(不确定,瞎猜的)……
想了想 T2,猜了个结论(其实可能已经证明了),就是一定是从上层往下考虑,每次致力于把该层合并成只剩一个点,多下来的下放到下一层。因为这样的策略看起来可以包含所有情况。那么 x0y1 就是送的贪心了吧,x1y1 分析一下也不是很难,也是直接贪。于是在 vscode 里写下了这样的代码:
if(X == 0 && Y == 0) { // As a gift.
puts("0");
} else if(X == 0 && Y == 1) { // Also as a gift.
} else if(X == 1 && Y == 0) { // Why is this problem so hard? Life is hard.
} else { // Not very hard.
}
并准备把除了 x1y0 都填上。这时候可能大概已经 2h30min 了,还剩 2h。但是由于这两部分太好写了,写 + 调只花了 20min,写完是还剩 1h40min。但是 ccf 非常可恶,它甚至没有告诉我 x y 四类各有多少分……这就很难受,如果不把 x1y0 做出来就还要继续写部分分,我不是很想(小 c 震怒!)。于是决定接下来的时间就继续想 x1y0 吧,毕竟感觉 x1y0 比 T3 的 poly 做法可做多了。
想了不少时间想出来了(做法就不讲了),大概是还剩 1h10min 的时候。忘了当时的心情了。当时把这一档的注释改成了 // Why is this problem so hard? Life is hard. (upd: Not very hard in fact.)
。写又花了 30min,到还剩 40min 的时候写 + 调完。想测一测正确性,又到了大无语时间……x0y1 和 x1y0 分别给了巨小的样例(答案是 1,就问你还有话说),x1y1 的样例虽然大但是是 ()()()()()()()...
,我真的佛了,这不就相当于没有样例吗。这玩意也没法拍,只能利用剩下来的时间把 T1 T2 一起干瞪眼咯。
摆了 10min 的烂(大脑一片空白),还剩 30min,决定开始瞪 T1。突然发现一件事:T1 的样例好像没有超过 \(\sqrt{2000}\) 的数!!!草,我立刻将样例 2 的一些质数(以及质因子)改成了稍大的质数,最令人害怕的事情出现了——输出变了……再仔细想想,发现做法假了!我无法描述当时的心情。2min 后发现稍微改一下就好了(笑),还要预处理逆元的幂啥的。改完后输出变回了之前的答案,这事 ao 的。又改了一些质数,答案也没变。遂将整个代码认真地通读一遍,然后扔了。
这时候还剩 15min 了,准备把 T2 通篇瞪一遍。我 TM,在这 15min 内发现了三个错误(分别是 las1
初始值没设成 n
、应当找该层节点数为 1 的连续段而不是 2、mn
和 mx
没算上一开始的「2 层」),其中最后一个是在最后 3min 发现并改正的……生死时速了属于是。最后卡在最后 1min 内勉强通读完毕。预计得分 100 + 100 + 12。
怎么说呢,虽然得到了很高的分数,但是比赛体验是极差的。
djq 好像看错 T3 题意了。回家看了一下 csy 的 T3 代码,也是全排列,真就整的两天 T3 都不可做呗。djq T2 写的是奇怪的 rmq 做法,不过我把我除了 x1y0 的 multiset 贪心做法跟他描述了一下,貌似是对的。以及 ymx 虽然没做出 x1y0,但其它三(两)部分做法跟我一样。
回到家第一件事(除了吃饭)就是打开 djq 的 T1 代码跟我自己拍,毕竟谁知道通过干瞪眼查错法有没有漏掉什么 bug 呢。可喜可贺的是 T1 过拍了,以及虽然极限数据在本地 T 了,传到洛谷上还是跑的很快的。
打开 T2 djq 的代码和自己拍,转反了,他的奇怪做法得到的答案好像比我劣两倍不止。也难怪,djq 甚至以为大样例很强来着(雾水)。换了 csy 的拍,过了除 x1y0 以外的三类,x1y0 他好像比我劣。又换了几个人,输出互不相同,/tuu 了。最后一次是找到了 yy 的代码,x1y0 好像跟我能拍上,这事 ao 的!不过他其他问好像挂了,于是我就把 yy 的 x1y0 和 csy 的其它三类拼起来拍,拍了 10000 组(也就是每类 2500 组左右)没挂。这样看来没啥问题了,那我是不是要 day2 标准分了???(转反了,标准分是两天总分算的。)
接下来一直在划水、测题。突然 tzc 跟我说我 T2 造 n = rnd(1, 100)
是不是有点弱了,我就调到了 1e5,直接就跟 yy 拍出锅了!而且他答案还比我小!这就很寄了。研究了一会儿破案了,yy 写的是 \(\mathrm O\!\left(n^2\log\right)\) 的做法,\(n\leq 2000\) 没问题,\(n>2000\) 他用了某些卡时的方法,答案就各种奇怪了,甚至还会变小。那就没事了(
后来小图灵也出了 T2 数据,交上去也 A 了,那应该是真没问题了。
NOIP 有一点点劣,能不能进 A 队呢?咱布道啊,咱也不敢问。
day 4 - 2022.4.19
d1T2 插值可能到 n + 1 项,但我只预处理了到 n 的逆元。不过只有可能会挂链的 14pts,还行,但是 400+ 要没了()
upd:晚上 6:00 出了分(当时我在外面排队做核酸),竟然 402 一分没挂(恰好跟 CSP-S2019 的分数一样,这算什么现象?)!不知道该说数据是好还是烂,个人更倾向于后者。
也出了一些不知道可不可靠的省内的榜,我单看省选分数竟然是 rk2!人生的小高潮了属于是(多亏了 djq 打假赛(bushi))。rk1 自然是 csy,比我多 20 几分。算上 NOIP 的话我是 rk3,被戴老师翻下去了/bx。不管这个榜可不可靠,A 队应该稳了吧。tzc 全排列写挂了,不然也能 A 队了(