中午到酒店,在我们拿到了 C T S CTS CTS的日程安排和餐券后,我们的领队以为我们住的地方也是在这个酒店,于是就在那儿排了半个多小时的队。排到我们后那儿的工作人员告诉我们,我们住的应该是那个酒店旁边的酒店,于是又去我们住的酒店排了好一会儿才办理好入住。午饭是在学校吃不成了,就只有在最开始去的酒店吃了点儿中餐,然后就赶去首师大附中试机。虽然去晚了,但还是有时间试机。和我预想的一样,这次比赛用机的操作系统果然是 N O I NOI NOI L i n u x Linux Linux, N O I NOI NOI L i n u x Linux Linux我之前用过,很不习惯,因为以前一直用的是 W i n d o w s Windows Windows。而且比赛用机里面的代码编写工具没什么功能,字体都不能调(至少我会用的编辑器都不能调字体),大括号不能自动匹配……但是没办法,只能将就用,希望后面的考试不会因为这个而受影响。晚餐好评,学校为我们提供的是自助餐,除了常见的饭菜以外还有点心、水果(后面几餐几乎每餐都有酸奶,也是可以随便拿)。吃完晚饭后参观了一下校园,景色还不错,中间有个喷泉,绿化搞得不错。然后就走回酒店。之前办理入住时我看到我是和一个外校的同学住一起,最开始我想换一下房间,和 s p a c e space space神仙住,但我发现每个人办理入住时都要交押金,还会领押金条,觉得换了之后太麻烦,押金条还要换一下,况且认识认识外校的神仙也是件好事,于是就没换。和我同住的 c j z cjz cjz是个初一的神仙, N O I P 2018 NOIP2018 NOIP2018分数高于我,怎么现在的初中生这么牛逼啊!还初一!我初一的时候还在学 C + + C++ C++基本语法,函数和递归都没学,呵呵。交流了一会儿后发现人家确实厉害,比我厉害多了。晚上也不知道该怎么复习,就看了几个算法模板,找了几个不熟悉的算法写了写,就睡了。
上午 8 : 30 8:30 8:30开考, 13 : 30 13:30 13:30结束。看完三题后果断选择先做提答,手玩了前两个点后发现第四个点可以写个程序求出方案,但是很繁琐,写了很长时间,中途还出了一些问题,等到过了这个点后已经 11 11 11点过了。看了看其他几个测试点,第三个点手玩可能要花不少时间,后面的点又很不可做,于是看前两道题。想了很久都没有思路,只有先把暴力写了。期间我用的 A n j u t a Anjuta Anjuta多次闪退(辣鸡 N O I NOI NOI L i n u x Linux Linux),幸好我随时按 C t r l + S Ctrl+S Ctrl+S,损失不大。最后还剩 10 10 10分钟,就检查了一下代码、文件存放位置。就等到考试结束。
下午 3 : 00 3:00 3:00就出了成绩, 10 + 8 + 30 10+8+30 10+8+30, T 2 T2 T2预估的有 20 20 20分啊,看了看我写的代码才发现我有个局部变量没有赋初值 0 0 0!还有 4 4 4分是式子推错了,我那样算会使得一些情况会被算多次。和我校其他选手交流后发现 T 2 T2 T2 60 60 60分都是送的!直接设 f ( i , j ) f(i,j) f(i,j)表示前 i i i个变量中,有 j j j个不同取值的变量的出现次数为奇数的方案数,转移方程非常简单。啊,我怎么连这个 D P DP DP都没想到。 T 1 T1 T1的 30 30 30分暴力也可以 D P DP DP,可我也没想到,我是真的菜。下午的试题讲评也听得不是很懂,以后再慢慢理解吧。我想今天已经考了 2 2 2道计数题,明天不会再考了吧,于是晚上做了一道数据结构题,又复习了几个模板,希望 d a y 2 day2 day2能考好点儿,就睡了。
d a y 2 day2 day2的考场和 d a y 1 day1 day1不同,键盘变好了一些。今天肯定不会用 A n j u t a Anjuta Anjuta了。拿到题后,发现 T 2 T2 T2和 T 3 T3 T3又是计数和概率,并且模数和 d a y 1 day1 day1的一样,都是 998244353 998244353 998244353,所以这次 C T S CTS CTS出了四道 998244353 998244353 998244353,牛逼。 T 1 T1 T1是计算几何,决定先想 T 1 T1 T1,想了半天只会 10 10 10分暴力。又去想 T 3 T3 T3,推出了一个式子,发现好像可以有 20 20 20分暴力,于是赶紧写上去,写到一半才发现后半部分我算的方式不对,改过来后发现暴力复杂度非常高,写出来后发现 n = 15 n=15 n=15的样例完全跑不出来,自闭了。后来又想了很久的 T 1 T1 T1,隐约发现一个性质:如果用一条闭合曲线去包围一个点集,那么当曲线为该点集的凸包时曲线长度最小。但是没有在我的脑海里形成这句话,当时我一直在想怎么才能让整体最优,就没有想局部。还是不会更多的分数,就开始想 T 2 T2 T2。 T 2 T2 T2怎么连暴力都想不出来?感觉要完了。直到最后 10 10 10分钟才发现暴力复杂度是 O ( 2 6 m ) O(26^m) O(26m)而不是我最开始想的 O ( 2 6 n ) O(26^n) O(26n),赶在比赛结束前写完暴力,检查了一下文件,考试就结束了。
我在吃饭时听到其他选手说 T 1 T1 T1写的 O ( 3 n ) O(3^n) O(3n)暴力,想了一下, O ( 3 n ) O(3^n) O(3n)不是直接状压 D P DP DP吗?由于如果有两条曲线相交那答案肯定不优,所以可以随意划分点集,每个点集 S S S所产生的代价 w ( S ) w(S) w(S)就是 S S S的凸包的周长,设 f ( S ) f(S) f(S)表示围住点集 S S S的最小代价,则 f ( S ) = m i n { f ( S − T ) + w ( T ) } ( T ≠ ∅ , T ⊆ S ) f(S)=min\{f(S-T)+w(T)\}(T \neq \varnothing, T \subseteq S) f(S)=min{f(S−T)+w(T)}(T̸=∅,T⊆S)。又是没想到 D P DP DP!这两天都是因为没想到 D P DP DP而失分!我 D P DP DP不过关!下午查成绩, 10 + 10 + 0 10+10+0 10+10+0,和预估的一致,我觉得我 F e Fe Fe稳了。下午听评讲也听不懂,晚上回去颓了。
上午看候选队排名前 6 6 6的论文答辩,答辩内容太神仙了,基本看不懂。而评委的提问也是很 i n t e r e s t i n g interesting interesting:
d z d dzd dzd:我是 d z d dzd dzd。虽然你现在是第一,但也不能够保证你一定进国家队,如果你真的没进,你会怎么想?
z z q zzq zzq:如果科学委员会决定我不进,肯定有他们的原因,只能说我答辩的表现不够好,我明年再来。
评委: c d q z cdqz cdqz是一所竞赛非常强的学校,为什么之前连续 23 23 23年都没人进国家队?
w x h wxh wxh:国家队选手是可遇而不可求的,进入国家队也和运气有一定关系。
评委:你出的这道题为什么有个 1 1 1分的子任务?
y j z yjz yjz:鼓励选手写正解。
评委:你出这道题有没有其他题作为背景?
y j z yjz yjz:没有,我游泳的时候想到的。
晚上颁奖典礼,我果然 F e Fe Fe了,而且还和 C u Cu Cu线差得远。不过我之前也做好了心理准备,所以没有很失落。这次 C T S CTS CTS让我深刻地意识到我 D P DP DP不过关,之前没做过太多 D P DP DP题,就导致了我在考场上连这么容易的 D P DP DP都没想到。最后回酒店好好颓了一个晚上。
今天其实没什么事情,早上去学校报了到以后就回了酒店。本来下午也是有试机的,但操作系统也是 N O I NOI NOI L i n u x Linux Linux,所以我们学校就都没去。除了去学校吃午饭和晚饭,其他时间就一直在酒店里颓。
今天上午和下午都是培训。上午是 l j t ljt ljt讲的《 P a g i n g Paging Paging& C a c h i n g Caching Caching》,内容有点儿高深,听到后面就完全听不懂了。但讲的内容很多,就当做是拓宽视野了吧。下午是元老级人物 y x c yxc yxc讲的《从集合角度理解 D P DP DP》,虽然讲的都是一些常见的 D P DP DP问题,但是强调了把状态定义为满足一些条件的元素所构成的集合大小,如何设计状态转移方程就是如何划分这个集合,这种思考方式有利于找到 D P DP DP的本质,值得借鉴。而且老师讲课水平也很高,讲得很透彻,而且时不时地会联系到现实生活中。如果这位老师讲一个比较难的知识,那效果应该会很好。晚上仍然复习了一下模板,就睡了。
从上午 9 : 00 9:00 9:00考到下午 2 : 00 2:00 2:00。 A P I O APIO APIO是 I O I IOI IOI赛制,此前参加的正式比赛都是 O I OI OI赛制,考前有点儿小期待。粗略看完三题后感觉 C C C题可能可做,于是先看 C C C。中途想了一个假的线段树做法,写到 q u e r y query query时才发现这个做法只能查询线段树上的节点所表示的区间,不能查询任意区间,这样只能过 a = b − 1 a=b-1 a=b−1的部分分。先不管这题,去看 B B B题,第一个 S u b t a s k Subtask Subtask就是暴力。然后想链的部分分,这不就是向询问点的左右两侧分别二分查找, c h e c k check check用线段树求区间最小值啊?写完这两个 S u b t a s k Subtask Subtask后交上去,怎么只有 S u b t a s k Subtask Subtask 1 1 1有分? S u b t a s k Subtask Subtask 2 2 2 M L E MLE MLE?确认了数组大小开得没问题后感觉应该是线段树或者二分无限递归了吧。看了看代码,二分果然有问题,有可能从起点不能往左边或者右边走,于是改了一下边界,交上去还是 M L E MLE MLE。又想了想,好像查询的区间有可能为空区间,又加了这个特判,结果交上去还是 M L E MLE MLE!!!这下自闭了,查了半天都没查出错误。算了,还是去看看 A A A题吧。先想 n = 1 n=1 n=1的部分分,考虑两个时刻 t 1 t1 t1, t 2 t2 t2满足什么条件时可以使得数对 ( x , y ) (x,y) (x,y)相同,经过简单的数学推导后发现当且仅当 t 2 − t 1 t2-t1 t2−t1为 A B gcd ( A , B + 1 ) \frac{AB}{\gcd(A,B+1)} gcd(A,B+1)AB的整数倍时对应的数对相同,也就是 t 1 t1 t1和 t 2 t2 t2模 A B gcd ( A , B + 1 ) \frac{AB}{\gcd(A,B+1)} gcd(A,B+1)AB同余。那原问题不就转化为求区间中的所有数模 A B gcd ( A , B + 1 ) \frac{AB}{\gcd(A,B+1)} gcd(A,B+1)AB后的不同的数的个数吗?当 n > = 1 n>=1 n>=1时不也是一样的吗?这是经典的求区间并的长度问题。写了一会儿,交上去, A A A了。此时离考试结束还有 50 m i n 50min 50min。于是我又去调 B B B题。我仔细检查了好几遍线段树,没问题;又仔细检查了二分的边界,也没问题。那还有什么问题啊?自己手造了几组数据,也都是对的。只好先把 C C C题的40分暴力写了。然后我又想做一下 B B B题和 C C C题的其他几个 S u b t a s k Subtask Subtask,但根本没心思想,心里只想快点儿把 B B B题链的数据调出来。就这样,直到考试结束,我都没能获得更多的分数。 100 + 13 + 40 100+13+40 100+13+40,感觉 C u Cu Cu应该还是有,得 A g Ag Ag可能性不大。正巧和我同住的 c j z cjz cjz神仙和我一个考场,我给他说了我 B B B题链的数据没调出来,他说:“那个我也想了很久,有可能 n = 1 n=1 n=1,这样就没有边,你 b u i l d ( 1 , 1 , m ) build(1,1,m) build(1,1,m)就会无限递归下去。”我听了后差点儿吐血身亡,完全没想到链可能没有边!检查了其他所有地方,就是没检查 b u i l d build build函数的调用!而且题目里说了 n > = 1 , m > = 0 n>=1,m>=0 n>=1,m>=0!我真是一个智障!后来问了一下 B B B题的 43 43 43分做法和 C C C题的 60 60 60分做法,哎呀!居然那么简单,我都没想到!也就是说得 203 203 203分都是不难的。只能说我是真的菜。下午讲评,不会的题还是不会。晚上又回酒店颓了。
今天上午和下午也是培训。上午是 l z j lzj lzj讲的《渲染技术初探》,感觉到了后面非常高深,给我们放了很多视频,了解一点儿 O I OI OI以外的知识也好,也当做是开眼界了吧。下午是 y t q ytq ytq和 w z d wzd wzd一起讲的《树上线性问题选讲》,中途 l c a lca lca也时不时地在一旁补充。感觉听得不是很懂,但非常实用,以后可以慢慢消化。晚上颁奖典礼, A g Ag Ag线 168 168 168, A u Au Au线 203 203 203!如果我把链的数据调出来了我就 A g Ag Ag了!像我一样过了 A A A题却还是 C u Cu Cu的人一定很少吧。现在后悔也没用,考场上没做出来的就是没做出来,不应该为自己找借口。不管何种原因没做出来,都说明自己能力不足。不过,这次发挥得比 C T S CTS CTS好,还是有进步。顺便吐槽一下,这次 A P I O APIO APIO金牌比银牌多(因为 203 203 203的太多了)!
回家了。明天就开始上文化课了。
1. C T S 1.CTS 1.CTS反映出我的 D P DP DP、计数没掌握好,导致一些很容易做出来的部分分都没想到做法。我之前好像这方面的题确实也练得比较少,所以以后应该多做题、多总结方法。
2. C T S 2.CTS 2.CTS没发挥好也可能与我考试时有段时间有点儿困有一定关系,所以考试的前一天真的要早点儿睡啊。考前冲一包咖啡喝也行,考 A P I O APIO APIO前我就喝了一袋咖啡,考试时精神相当好。
3. 3. 3.观察一个变量的数据范围时,不仅要看最大值,更要看最小值!!!最大值通常决定着数组开多大,程序运行多久,等等。而最小值可能会产生一些特殊情况,如 0 0 0、负数可能要用不同的方式处理。这次 A P I O APIO APIO就是因为这个把我害惨了。所以以后考虑问题一定要考虑全面,不可漏掉特殊情况,想一想你的做法是不是对所有数据都适用,这样就可以避免犯这种低级错误了。