NOI2021 同步赛游记

Day 1(7.26)

从 \(8:30\) 延期到 \(10:00\) 了,看了一下去年的题目,之后又去看了看斜率优化dp。

比赛开始之后,我用 \(30\operatorname{min}\) 的时间读了读题,感觉三题中第一题最可做,于是去做T1,但是想了 \(15\operatorname{min}\) 都没想出个所以然,决定先暂时不想正解,去打暴力和链的部分分。

我一开始打的是链的部分分,用的是线段树,但是写挂了,之后就开始调试,但是我当时其实不太会用紫色勾勾的调试(平时调试都是输出出来看的),而且因为没过的样例太大了,很难调,越调越急,调了 \(40\operatorname{min}\) 之后还没调出来,便出去转了一圈放平心态。

回来之后很快就发现是多组数据忘记清空一些数组了,改过来就过了样例。之后又写了个暴力,然后就让它们对拍,我就去想T2。(已经过去 \(2.5\operatorname{h}\),还剩$ 2.5\operatorname{h}$)

T2想了 \(20\operatorname{min}\) 就放弃了,决定先写一个暴力,之后在考虑特殊性质的部分分。

打了大概 \(10\operatorname{min}\) 之后就写出来了,但是发现没过样例,而且之后不久就发现方法有问题,我就开始更改写法,试图写了代码极长两个解法,但之后都证伪了(其中还调试了一会儿),我发现只剩 \(70\operatorname{min}\) 了,于是马上写了个 \(k=2,n_1\leq10\) 的状压dp,之后就看T3去了。

我一开始我看完T3之后,没有读懂题目,我不知道为什么一开始打了个Floyd,之后对着样例看才知道题目是求可以经过的城市的个数,之后马上去打一个 \(q\) 次缩点的暴力,但是到最后都没调对。

考完之后试图和同机房同学一起调T3,但是还没调出来。

估分:\(50+20+0=70\)

洛谷测的:\(60+0+0=60\)

实际:未知,但应该差不多。

T1的\(O(nm)\)暴力居然能跑过\(2\times10^4\)?不过可能在CCF那跑不过。

T2挂了,至今未知原因,而且急匆匆打出来的挂了的确很正常。

Day 2(7.28)

网址没迟到,但是它打不开……\(9:00\)才开始。

还是用了 \(30\operatorname{min}\) 把题都看了一遍,感觉T1最可做(给我的第一印象是trie)

写了个trie之后发现空间根本开不下,好像还不如\(O(256nm)\)匹配,然后发现这个常数巨大,于是开始卡常。

发现\(256=16\times16\),于是把每个数都转成\(2^{16}=65536\)进制,之后处理出\([1,65535]\)的二进制下\(1\)的个数,最后匹配的时候算出两个数每一位的异或的二进制下\(1\)的个数,加和大于\(k\)就失配,否则匹配成功。

注:我选择\(16\)并非想到正解,而是我想选\(256\)的因数,发现\(2^{32}\)太大了,\(2^8\)太小了。

之后去写T2,我感觉这题十分难写,于是就写了个暴力和性质A就过了。

之后去写T3,想了\(1\operatorname{h}\)(中途有出去散心)都没想到暴力怎么写,之后就写了\(n=m=1\)的点就算了,此时还剩\(1.5\operatorname{h}\)。

然后我大胆去给T1卡常了,写了一堆循环展开,之后还剩\(1\operatorname{h}\)。

最后1h发现T2好像过不去第3个样例(WA),之后调到最好\(10\operatorname{min}\)都没调出来。

最后\(10\operatorname{min}\)我发现用暴力跑都没过(WA),之后试图找错,但还是没找出来。

估分:\(24+0+8=32\)

洛谷测的:\(32+5+8=45\)

实际:未知,但应该差不多。

T1的\(O(nm)\)暴力又能过\(2\times10^4\)?!!

T2还能给我\(5\)分?!!

T3是正常的。

总结

挂分:这次挂分应该只有Day1T2了,我在T1花了\(2\operatorname{h}\),那时我为了赶紧写T3连个样例都不测(没给对应的样例,也懒得手造样例)。但是这都在考场上了,我还能有这种偷懒的心理,这说明我应该要多代码保证正确性,也应该合理分配时间,尽量克服惰性。

上一篇:学习笔记(7):数据分析预科班-MySQL的查询操作


下一篇:CSP2021 J/S复赛游记