其他分享
首页 > 其他分享> > CSP2021-S2游记

CSP2021-S2游记

作者:互联网

Day -1

上了一天课,晚上回来摸了摸鱼,然后被告知第二天中午前交最佳团日的视频。

Day 0

早上语文课剪视频(其实就把图贴PPT里然后导出为MP4)。然后数学月考,自我感觉还不错,但下午发现有一题读错题了。
下午计算之美课补化学实验报告,然后化学实验日常做到8点20。
晚上回来又让我做最佳团日推送,直接鸽了去复习OI了,结果打了个线段树就不想打了,于是上床玩手机......

Day 1

一觉睡到11点多,然后收拾收拾要带的东西,和同学西南门打车去了。
还是在交大附中考。

进考场先打了个快读,然后想了想又打了个邻接表和gcd。
开考前10分钟就拿到题了。
T1 airport 一看,线段覆盖,我最不擅长的类型。读题读错了,以为就是那种贪心的水题 做两遍加起来就行了,然后发现自己不会贪,稍微思考了一下发现可以线段树写(区间加区间查询min)。写了30min,没过样例,才发现理解错题了,发现直接改代码复杂度多个 \(n\),于是直接放弃这题。
T2 bracket 第一段“……经典问题,小w秒切了这道题,然后加大了难度,小w不会了,于是来请教你”,然后发现并不会经典问题怎么做,看了看后文对于合法串的定义,发现更加不可做。下一题。
T3 palin 第一眼,字符串题,寄。第二眼,这题风格怎么这么cf?手玩了一下样例发现,第一个拿走某个数字,就会导致对应的数字必须最后拿走,也就是说,拿走第一个数字后,字符串被必须最后拿走的数字截成了两半,把这俩半存成两个队列,队列只能从开头拿。然后发现拿走一个以后它对应的数就得留最后拿,然后它后面那些数就堵那了,所以他对应的数必须在队尾才行。然后思路就出来了,第一步分从左和从右拿两种,然后把数列拆成两个队列,每次取队首时需要满足存在一个队尾和它相等。结果没过大样例,瞪了半天发现又读错题了,把“答案字典序最小”理解成“回文串字典序最小”了。然后改改过了大样例就放那了。
T4 看一眼,好复杂,看一眼时间,还有2h,决定还是回去莽T1,毕竟我的水平还不是那种可以倒序开题的。
T1 要求怎样分配答案最大,那如果枚举\(O(n)\)种分配方式的话,感觉不可能在\(polylog\)时间里求出答案,所以应该是处理出dp[n][0/1]=给国内/国际分配n个廊桥时能停靠的飞机数,然后这个可以由f[i][0/1]=第i个国内/国际飞机需要最少几个廊桥才能停靠 \(O(n)\)的推出。考虑到廊桥是“先到先得”的,于是显然可以把飞机按左端点排个序。又有性质:增加一个廊桥必定不会使得本来能停靠的飞机变为不能停靠的。不妨假设飞机一定停靠在空闲的编号最小的廊桥,那么这个最小编号就是f[i][0/1]。而要方便地求这个信息,就需要维护i时刻编号最小的空闲的廊桥,这不太好维护,但是我们可以维护g[i]=i时刻变为空闲的廊桥(没有的话记为inf),然后对于每个飞机只需查询其左端点以左的最小值即可。查询到最小值x后需要进行两个操作:1. 把g[该飞机右端点]设为x。 2. 把g[x的位置]设为inf。于是 只需要在(离散化后的)时间轴上建一棵线段树维护 区间查询最小值,单点修改,区间查询最小值的位置 即可。此时距离考试结束仅剩30min,但考虑到前面已经写过一个类似的线段树,所以我就直接莽正解。最后剩10min的时候发现莽不出来了,就把前面一个过了小样例没过大样例的算法交了然后匆忙去敲T2暴力。
T2 扫了一眼发现只能打个dfs,然后发现check()函数不会写(因为其实没有理解合法序列的定义),然后瞎改了改最后也没过样例。
最后一分钟看了一眼T3文件输入输出。

估分:0+eps+100+0. T2的分是因为我发现我的代码大概率输出0,一般来说数据里至少要存在一个答案为0的点。不过如果出题人能像去年省选一样拿脚造数据,或许T1也能水点分。
洛谷民间数据:0+0+100+0

出了分再来更新...

标签:发现,CSP2021,S2,线段,T2,然后,T1,廊桥,游记
来源: https://www.cnblogs.com/int-2147483648/p/15458537.html