THUWC2019(2.0版)游记

Posted by wyj on December 20, 2019

由于今年有两个THUWC,所以不妨把这个称为2.0版。

Day 0

颓废了一整天,经历了初始伤害,初始射击延迟的the Lost打败???,经历了吐根+纵火狂。

在火车上我们旁边的人貌似是一个C++程序员,因为他打电话的时候满口都是些constvolatile之类的。

Day 1

早上睡了个懒觉。

试机时真的震惊了,说好的Ubuntu 18.04 LTS居然变成了这个不伦不类的东西!一看这个丑陋无比的桌面环境,就觉得这是只在维基上见过的XFCE???然后我找了大半天找到了一个终端,一w,真TM是Xfce4。这个THU是真的偷工减料,连GNOME都省了。

中间经过了多少的苦难就省略了,最终我终于费尽九牛二虎之力把Ctrl+Alt+T设置成了打开终端。真的无法想象世界上还有一个Ctrl+Alt+T都不支持的Linux。

我不是很懂为什么THU要自己装Xfce,而不是用现成的Xubuntu发行版。也不是很懂为什么对/root有读取权限。

中午例行拍照。

下午是真的自闭了。开场我觉得T1是简单题,就对着它想了1.5h,还是不会,心里很慌。我是想考虑每一个点是否可以成为答案,首先要考虑后面对它的影响,这很好算;然后是前面的,这让我自闭了,我假了很多次。

接下来一个小时我想完了三道题的全部我会的暴力。大概还差一丁点就100分吧。所以切一道题要比写满暴力赚得多。我就本着宁为玉碎不为瓦全的心理又想了半个小时的T1,然而还是不会。

只好开始码暴力了。首先是T3的链,我用脚写了个莫队,过了编译就直接过了。可惜\(n=3\times 10^5, m=6\times 10^5\)的部分分过不去。根据今年的THUWC的经验,我知道奇偶排序+\(\frac{n}{\sqrt{m}}\),然而还是没有什么卵用,set常数太大了。

然后我口胡了一下整个题,大概是前几天刚看的动态维护虚树应该就可以做到根号log,然而肯定不会写。

然后是暴力,这比莫队难写,我写挂了一次。

然后是T2的前\(3 \times 8\)分,因为我一开始没看广播,以为只能过第一个和第三个,写完了发现第二个也过了,然后才明白。

用脚写了个13分的树剖,过了编译就直接过了这个部分分,因为没有现成的数据。

我每道题都是过了pretest再对拍的。发现这个机器真的有点慢,符合我对一个squashfs的想象,可能比评测机慢3倍。

T3还有一个4分的二维数点懒得写了,毕竟看看这个码量和得分,性价比不高。

考完试我遭到了致命打击,左右两个大佬都250+,并且纷纷跟我说什么“自闭了”之类的。。。

出考场之后问了lzq T1做法,听到第一句话的时候就秒懂了。为什么我这都想不到啊,果然连普及组水平都没有。

题外话

提交的时候我写了个”Oh Nooooo!!!!!!”,然后该死的bash!!转义成了上一个命令!!!

这导致我心态更加炸裂,连git版本回退命令都忘了,顺手敲了一个git reset --hard HEAD^,然后才想起来这是放弃修改。。。。

所以之前写的东西都找不到了,只好上网找找解决方案。幸亏git什么都帮我留着,输入一个git reflog就可以查看版本号,然后就可以回到未来了。

Day 2

这次还是有点自闭。一看T1,就觉得乱搞很有前途,写了个只记最大值和最小值的暴力,过了后四个pretest。对拍9大概是两万组WA一组的样子。拼了一个暴力。如果还可以维护绝对值最小的数就可以保证正确性了,然而这个明显是NP完全的。所以我不太会。

然后就是T2,想了很久第二个subtask都不会,然而我一直没有往支配树那边想。所以只写了第一个的暴力和第三个的树上倍增暴力。

主要精力我放在了T3上。首先是暴力。这个暴力很难写,我调了很久,并且还一分都拿不到,10已经T光光了。但是我的目标不是暴力,我是为了观察规律。首先我观察了\(k=1,n=4\)和\(5\)的情况,觉得这个很有规律。首先答案是\((k+1)!(k+1)^{x}\)的形式,我就尝试找出这个\(x\),然而没有找到一个正确的方法。所以我扩大了一下,尝试\(k=2,n=6\)和\(7\),终于发现了一个具体的结论:

\[F(l,k)=F(l[1:],k)+1-\max(j\ \textrm{if}(\ l[i]<l[0]\ \textrm{and}\ l[i]>l[i-1])\ \textrm{for}\ 2 \lt i \le j)\]

忽略这个python和\(\LaTeX\)结合体伪代码。这里要放\(k\)是因为虽然转移和\(k\)无关,但是边界和\(k\)有关。

我就写了个程序实现这个乱搞,然而只获得了8分。我在10以内怎么对拍都没有错,然而后面那一档\(tp=1,n\le 1000\)死活过不去,不像是猜想假了啊?

本来如果这个10分过了,后面的三档分都很有前途(优化掉一方,然后也许可以数据结构维护之类的?),然而这档我一直奋斗到了最后5分钟还是没过。百思不得其解。

所以最后还是被吊锤了,彻底失败。晚上可以直接放弃了。

Day 2+

晚上的主题是Cache。这个东西貌似和OI关系比较近,所以没什么优势。这个T1就让我陷入了云里雾里,我到最后都还没搞懂这个奇怪的算法在干什么。

但是如果能够用Qt的话,超级好用的信号/槽机制与这个题完美适应。可是没有。所以我就瞎jb写了一通,爆零了。肉眼查错了20分钟,发现了错误所在。于是用了整整1.5个小时切掉了T1。

然后后面的题貌似更加可做。我知道scanf("%x"),就可以轻松读入T2。然而第一档还是WA了四次,都是些sb错误。后面的部分分全都一遍过了。

这时还有40分钟,我把T2复制了一遍放到T3,稍微修改了下就爆零了。这个题目很不友善,我完全不能清楚的理解tagoffsetindex分别是什么意思。然而经过了半个小时的猜测,我终于过了两个样例。我想:这回稳了啊,就交了一发,然而居然只有第一档分。。。。。肉眼查错了10分钟,没看出来有什么错。只好弃疗了。

Day 3

没进面试。晚上体验了睡上铺的感觉,真的很别扭。