CSP-S2019游记

Day0

到了广州的瑞季悦居酒店,酒店设施显然不如从前(谁说之前的酒店烂的来着?),而且位置极为偏僻。
LJF甚至疑惑这家酒店设立在这里究竟是为了什么样的经济效益。
拼房时被人背叛,于是在高一中被挤出来。跟LJF一个房间。
晚上无聊下楼来健身房玩一玩,和一位看起来像大学生的人谈笑风生。
后来才知道那是左谭励大佬……我才记起来他还是最后一届GDKOI的出题人之一……


Day1

早餐还可以(尽管不如先前的酒店)
到了广州二中,很快进了考场。
开始了,解压密码输了我三次(原来是监考员写错了)
匆匆打开题目

看完了三题,开始搞T1。
T1很水,本来可以直接打,但我还是规规矩矩地写下了递推式(尽管没有花多长时间)。
后来检查的时候加了unsigned long long

过了样例之后直接去搞T2。
T2按照常规套路搞个前缀和。考虑计算某个点结尾的方案数(记为 g x g_x gx)。对于一个节点 x x x,若有祖先 y y y满足 s u m y = s u m x sum_y=sum_x sumy=sumx,并且中间的 s u m k sum_k sumk都大于等于 s u m x sum_x sumx,则方案数加一。
然后发现可以找到深度最大的 y y y,如果满足后面的那个条件,就直接 g x = g y + 1 g_x=g_y+1 gx=gy+1
于是线段树做法get√
接着很快发现,由于前缀和是连续的,所以只需要判断上一个 s u m x − 1 sum_x-1 sumx1是否在 x x x y y y之间。如果在,那肯定不行。
最终打了 O ( n ) O(n) O(n)做法。
样例过了,没有打拍。两题只花了一个小时,自我感觉良好……

开始刚T3。
肯定是从小到大枚举数字,让每个数字移到它能到的最小的点。
然而要考虑它对后面的影响,比较麻烦。
分析了一波,感觉链和菊花都会了。
不管它,先打个暴力看看,后面还要用来拍……
这暴力还调了很久,原因是读入的时候读的是每个数字在的点的编号,我以为是每个点上数字的编号……
打完暴力中之后推正解。
想到差分约束,就是比较选择边的时间顺序,从先选的边往后选的边连一条边。搞完了之后拓扑排序就好了。
大概推了推:从 S S S T T T,假设路径为 S → u → . . . v → T S\to u \to...v \to T Su...vT
S S S T T T中间的边都是从前往后连,
( S , u ) (S,u) (S,u)连向跟 S S S相连的其它边。
(打出来调了调后发现)跟 T T T相连的其他边连向边 ( v , T ) (v,T) (v,T)
(发现了什么?后来看了题解我才意识到,我漏了这样的东西:对于中间的 y → x → z y\to x \to z yxz,跟 x x x相连的其它边要么在 ( y , x ) (y,x) (y,x)之前,要么在 ( x , z ) (x,z) (x,z)之后。这个东西不好直接差分约束,所以要对于每个点连出的所有边来搞个链表,具体来说,最先是哪些边,最后是哪些边,中间有哪些边是连在一起的)
各种乱搞各种调试,第一个样例终于过了前面三个数据,然而最后一个一直都没有过,于是这个伪正解就没有交上去(后来发现其实这样完全是可以把链的情况过掉的,可惜我没有将它和暴力复制粘贴到一起。血亏)

出来之后,周围的人都估分210。
(实际上,后来我才发现T1只有95分,因为1ull<<64居然等于 1 1 1。我当时在自然溢出的角度上来看这一点,认为这个是 0 0 0

下午的时候跟着高三的大佬们去了一下植树公园,在踌躇一阵后决定回来吃饭,再去广州奥园广场逛,然而发现对逛购物中心没有兴趣(一行人都是这样)。最终和LJF走路回酒店。


Day2

还是先看完三题。
T1没有一眼AC,很不爽。
T3似乎有点思路,但还是按照正常顺序来(后来我发现我错了)。

刚T1。
一开始真的没有头绪……听到旁边的人已经在啪啪啪,心中或多或少都会有些焦躁。
突然想到正难则反,求不合法的方案数。
然后搞出了一条性质:设出现次数最多(也就是大于 k 2 \frac{k}{2} 2k)的为 x x x,则 x x x的出现次数大于等于其它的出现次数之和。
于是就可以搞出了一个三维DP(顺便吐槽一下,我有好长一段时间想着如何用多项式来搞,看那 998244353 998244353 998244353很诱人
最后我发现,将这两个东西做个差,差大于 0 0 0就行了。
于是DP减了一维,时间复杂度 O ( n 2 m ) O(n^2m) O(n2m)
这时候已经过了一个小时……
我太难了

刚T2。
没刚出来。
随便推了个最简单的DP:状态 f i , j f_{i,j} fi,j,表示最后一个区间为 ( j , i ] (j,i] (j,i]的答案。
可以 O ( n 2 ) O(n^2) O(n2)转移。
刚不出来,只能看T3。

然后发现T3是道大水题。类似于这样的题之前是做过的。
将整棵树剖一下。对于一棵子树,重心一定在从根节点下来的那条重链上。
对于每个点,求出它的重儿子,它的重心从重儿子转移过来。具体来说,将重儿子所在子树的重心复制过来,然后试着往上跳一跳。
这样就很好地搞出每棵子树的重心了。
子树的补集的重心怎么求?
直接换根DP啊!
我先打了个暴力的 O ( n 2 ) O(n^2) O(n2)换根DP,然后开始刚 O ( n ) O(n) O(n)正解。
打代码和调试的过程很不顺利。正解没有调出来,于是交了暴力。
比大众分还低,血亏……


总结

总分大概400多一点吧……太菜了……
其实这次比赛时真的憋屈:Day1T3没有交伪正解,Day2T3没有调出来。
关于Day1,我想最大的教训就是打题要有些理性,不要太有激情。比赛时我甚至连最后两分钟都在调T3。实际上应该在最后五分钟的时候,将暴力和伪正解合并在一起,这样起码分数会高一点。
关于Day2,T3没有调出来显现出我代码的实现能力还不行。换根DP打得还是不够多(实际上这次换根DP的打法跟我平常时的打法很不一样)。
至于策略,其实我认为Day2在策略上没有犯什么毛病,因为当时我感觉自己真的可以切T3,并且实际上也不是特别难。如果当时我一开始就换种打法,说不定已经AC了。如果有毛病,只能说是我太在意题目的顺序(可能是平常的NOIplus模拟赛做多了,于是CSP-S中潜意识里告诉自己要按照顺序来),先刚T2再刚T3。事实上,如果实现不太难,先做后面的题再做前面的题也未尝不可。
Day2T2只想出了 O ( n 2 ) O(n^2) O(n2)的做法,而周围的人基本上都会 O ( n lg ⁡ n ) O(n \lg n) O(nlgn)
这是我能力问题吧……比赛时这题我也刚了很久的……在猜结论、贪心这一块,我是真的不行。

一句话——我还是太菜了

你可能感兴趣的:(比赛总结)