由于今年有两个THUWC,所以不妨把这个称为2.0版。
Day 0
颓废了一整天,经历了初始伤害,初始射击延迟的the Lost打败???,经历了吐根+纵火狂。
在火车上我们旁边的人貌似是一个C++程序员,因为他打电话的时候满口都是些const
,volatile
之类的。
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,稍微修改了下就爆零了。这个题目很不友善,我完全不能清楚的理解tag
,offset
,index
分别是什么意思。然而经过了半个小时的猜测,我终于过了两个样例。我想:这回稳了啊,就交了一发,然而居然只有第一档分。。。。。肉眼查错了10分钟,没看出来有什么错。只好弃疗了。
Day 3
没进面试。晚上体验了睡上铺的感觉,真的很别扭。