Noip2020游记
Day 0
上午在机房云写题,看了好多好多篇题解(可能也没什么用),到了中午时间差不多了就跟学校一起出发了,车上把网易云音乐雷达刷了一遍,下午到酒店开始各种看,把欧拉函数、点分治、KMP等等全过了一下,晚上和zps、hjz下去买了点面包饮料,Noip从明天8:30考到13:00,午饭不能好好吃了。
Day 1
虽然考得不好,但还是写下来吧。
由于自己的身份证上次Csp在南京丢了,带了前不久过期的,担心刷身份证进不去南航,只好和教练一起走,7:50到了机房然后简单试机,发现初中学弟yhy坐在斜对面,有点惊喜。
8:25准时发放题面,花了10min把四道题都看了一遍,感觉今年难度不小。
T1简单拓扑序,看数据范围随手开了long long,感觉T1应该不会太***钻,20min过了大样例就搁那了。
T2是字符串(天哪Noip考字符串了),\(|S|\leq 2^{20}\) ,枚举循环节应该是KMP,我想想奇数字符数量有什么限制。。字符串A肯定是一个前缀,相邻两个前缀的F绝对值差小于等于1,好像没啥用,如果直接查前缀中满足F限制的,emmm是主席树,用计算器算了一下 \(O(nlog^2n)\) 好像T飞了,Noip题目不至于我连T2都不会吧。
重新看了一遍题面,突然注意到字符串全是由小写英文字符组成的,突然get到了,任何一个字符串 \(S\) 都有 \(F(S)\leq 26\) ,那维护F限制个数就可以 \(O(26n)\) ,想想没有问题就开始码了,感觉KMP或许容易写错,就先调好了再粘代码里面去,写完9:45左右,两个小样例过了,结果第三个样例出锅了,看了眼大小完全没法手调,赶紧滚去写对拍,幸亏小范围拍出错了,查了查发现记数的时候把 \(tf[a[i]-'a']\) 写成了 \(tf[a[i]]\) ,改掉以后能过大样例了,第四个样例1e6的跑了0.12s左右,对拍写了白不拍,把数据范围放成 \(n\leq 600\) 先让它跑去了。
调完已经10:40了,比赛已经将近过去一半,开始看T3,又是人类智慧题,这个柱子上球的转移和汉诺塔有点像啊,要求操作数 \(\leq 820000\) ,有cf构造题的味道了,想了一会好像跟汉诺塔没有关系,\(n\leq 50,m\leq 85\) 40pts应该是 \(O(n^2m)\) 的操作数,先看这一档分,过了20min感觉会口胡了,就是 \(O(nm)\) 地移动一根柱上的点,两倍常数 \(720000\) 左右应该可以过。
接下来想 \(O(n^2m)\) 的70~100pts的做法,要 \(O(n)\) 地放好一个点,这好像有点难搞,先从小数据分析吧,当 \(n=2,m\leq 20\) 的时候怎么做到操作数在80以内?盯着草稿纸看了半个小时,终于get到了一个上限80的做法,嗯不错,那 \(n=3\) 的时候怎么做呢,这时我发现自己没了头绪, \(n=2\) 的做法并不适用于 \(n=3\) 的时候。
想T3期间我一直都在看时间,这个时候已经12:05了,T4都还没有做,感觉再这么刚下去我就要gg了,放弃挣扎去看T4,感觉它完全不可做,维护k维移动区间这种东西想想细节就很复杂,1h应该调不完,写了一个15~30pts的暴搜,还花了一会调了一下。
回到T3已经12:35了,完了 \(O(nm^2)\) 也没时间码了,对着自己的草稿纸把 \(n=2\) 10pts的做法写上,此时已经12:50,监考老师开始讲比赛结束须知,检查一遍头文件,把代码复制到选手文件夹,在Noi Linux上编译了一下确定不会CE后比赛差不多结束了。
下午回苏州前,酒店大厅里和大家交流的过程中惊恐地发现自己T2时间复杂度假掉了,求循环节直接跳nxt数组在全a串的时候会被卡成 \(O(n^2)\) ,瞬间感觉自己没了。
T3做出来的人不多,zps有 \(O(n^2m)\) 的做法,虽然常数大但也能拿至少40pts,U群里T3出题人myy说T1会卡long long,T3有 \(O(\frac{1}{2}n^2m)\) 的分治做法,这好像超出了我的能力范围,原来T2还有Z函数的 \(O(Tn)\) 做法,不少复杂度正确的 \(O(Tn(ln n+26))\) 都被卡常卡成了84pts,CCF毒瘤
车上把自己代码放信奥题库上测:90+48+0+30=168,T2真的被卡成暴力分了,欲哭无泪,T3 wa掉,这还是自己没有把握好时间啊,成绩挺不理想的,NOIP的题目风格开始越来越像cf了。
我还是好好反思吧,这个分数很难过JSOI线了,水平还是有臻提高。。