HNOI2018滚粗记
标签: 游记
Day 0
上午在家里搞颓,下午来学校干了点正事,把自己已经忘光了的数论补了补,顺便还学了一下拉格朗日差值,晚上在家补总结。
Day 1
很早就到了学校,像以前比赛一样在那里吃早餐。
到了机房之后狂敲配置模板,表示很羡慕用vim的同学。
先看T1,感觉是一道要靠性质的题目?
先写了一个30分的DP.
后面写完暴力回来想的时候发现从后往前推好像有些什么不得了的性质。
于是我就想一步一步算,要么就相同,要么就是子集之类的。
结果发现这两种位运算不满足结合律,所以就没往这方面想了,然后又想的比较偏,什么meet in the middle ,FWT合并之类的都出来了。
再看T2,第一眼感觉与ZJOI day1 T2的题目形式有点像啊,都是要支持修改维护一个最优解。
所以我打完暴力就开始猜结论,然后随便猜了一下,好像是(min{ max{t_{st+i}+n-i } },st in [1,n]),反正就是先等一会,然后再转一圈。
然后发现可以(O(n))单调队列一下就40分了。
然后我又发现数据范围只有(10^5),但是时限2s,还开O2,所以我觉得这题肯定是分块,刚好之前学校考过一道分块加单调队列的题,但是想了很久也没有思路(还不如在T3上卡卡常)
T3,30分就是一个环套树DP。
当我正准备打的时候,我突然灵(lan)光(de)一(yao)闪(si),突然想到可以用不考虑这条边的总方案数-强制选这条边的方案数。仔细一想,突然发现可以容斥,那么复杂度就是(O(2^{m-n+1}×n))的?这复杂度感觉是很对的了。
然而等我打完之后发现极限数据根本跑不出来,连80pts的都要跑4s。
于是我决定卡常。
首先发现这个DP看起来很萌,完全可以改成从底向上合并,那么把深度拿出来排序,只需要一个for循环即可。
然后容斥强行限制了某些点必须选,所以可以判一想如果为0就不管,因为取模的常数还是特别大的。
然后,由于你已经把递归都改成了循环,所以一定要加register。
当这些优化都加上之后,你会发现跑80pts大约要1.05s。
然后就GG了。
期望分数(30+40+70=140)
主要是感觉T2有些思路,然后就去玩T2了。
下午回去了,在家里搞颓。
看到成绩发现 (10+40+75=125).
T1 fst了。
看了一下,发现我状压的时候写的是((1<< n)-1)。
其他分还算正常,T3卡常所以多过了5pts。
给予T1的时间实在太少了,就只有打暴力的时间,而且我最后对拍的时候,n,m都是相同的,当然拍不出错。
明天还是好好打暴力,争取把暴力分都拿到。
Day2
T1,60分简直就是送的,所以根本没有仔细想。
T2,40分很容易想,然后我观察了一下,发现就是a[i]的选完了之后i才能选,所以这就构成了一个拓扑结构,更准确的来说,构成了一棵以0为根的树。然后直接贪心显然是错的。
所以就xjb乱搞,把两棵子树按照归并排序的那套理论合并,结果样例都没过。
T3,随便写了个20分就弃疗了。
期望分数 (60+40+20=120)
大家应该都是这个分数吧,结果一出去。
T3不是傻逼题吗,为什么一定要记子树的状态,tm不记父亲的状态啊。
T2是雅礼集训原题?而且也是贪心合并?
T1只需要反过来暴力就可以AC?
凉凉。
不管不管题出的怎么样,不管有多少理由,都改变不了自己分低的事实。
不过考试既然已经过去,那么分数就不是最重要的的了。
今年还只是初三,等到下半年,也就高一了。
希望能尽快地成长吧。