2022.10.11 ZRnoip20连day2
1.时间安排
8:30~8:40
T1是签到题,直接就签到了。
8:40~10:10
T2是一个关于gcd的构造题,因为数据小比较好构,手摸了一下n<=12的情况,感性认为可以分为若干个质因子的次方的段,然后相邻两段通过一切"桥梁"数字连起来这样,就按照贪心打了一份,在n<=12时都正确。
但是后来手模n=21的时候发现贪心给出的构造并不是最优的,一时又不知道怎么正确构造。
于是匠人精神把n<=30的50分全手模了出来(累死我了)。
10:10~10:50
本来准备先写T3的暴力,但是写了20分钟突然发现不会讨论了,寄。
于是写了个k>0的特殊性质分,不过没有数据也不知道对不对,自己手构的小数据没问题。
10:50~11:40
继续想T3的暴力无果,在11:10左右开始码T4暴力,30码完。
想不出T4链的情况做法。
11:40~13:00
突然发现T3就是维护若干等差数列,打上标记乱维护,前两个操作很简单,区间加或乘单点查询,但是第三个操作要求第pos个位置是哪个等差数列的一部分给整不会了。
编了个可能复杂度是 \(nlog^2n\) 的做法,直接冲正解,一直调不出来。
到40左右放弃了,匆匆打了个T3的暴力,也来不及检验正确性了。
result:
T1:100 T2:50 T3:0 T4:20
(寄了,但还是上分了)
2.简要题解
T1:略。
T2:
容易想到>n/2的质数一定不能加入序列里,继续讨论发现>n/3且<=n/2的质数只能选两个放首尾。
然后按题解所示构造就行了。
T3:
正解确实是 \(nlog^2n\) 。
前两个的操作和题解是一样的,没有分析出第三个操作利用到的性质。
每个k=0的等差数列会让之前的都翻1倍,所以最多过30个k=0的等差数列。
那么在两个k=0之间夹着的k>0一定是递增的,可以二分,这一点在考试时没分析到,硬上线段树上二分难写也没调出来。
特殊情况是所有等差数列都是k=0且询问位置是0,这时需要预处理出一个k=0前面距离它最近的k>0是谁,特判掉即可。
细节较多。
T4:
点分治从来没写出来过/kk。
对两棵树都进行点分治,预处理出某个重心到它点分树子树内所有点的距离。
然后考虑对第一棵树枚举lca1,第二棵树从第一棵树lca1下的x对应的lca2枚举y,暴力做根据点分树树高不超过log可证明是 \(nlog^2n\) 的,维护出x到lca1,lca2的次小值,每次枚举到新的y更新,因为每次的答案如果x,y的lca不是lca1和lca2答案只可能大,所以一定能求得正确的最小值。
细节较多。
3.反思
1 .今天时间安排很不合理,应该先把后三题暴力写完再去搞T2的"匠人精神",大约1h的时间都花在T2的30分上了。
还是应该先打暴力求稳。今天一看T1这么水,轻视了这场的难度,以为T2能快速切,忽略了时间的规划。
2 .构造题连考了两场都不会做,看来还是构造思维不够,多找些cf上的构造做做。
3 .如果一个题想不到普通的数据结构做法,那大概率就是要静下心来分析性质了。
4 .点分树还是练的不够,逢考要么不会要么挂,找些点分树的题练练。

浙公网安备 33010602011771号