序幕
\(\text{6:10}\):闹钟没响,惊醒。
\(\text{6:45}\):到校,写题。
\(\text{7:30}\):膜你赛。
大致浏览,看题目就知道比昨天的难。
还是先推一推 T1,手玩一下找到性质,写的时候出了一点波澜,注意炸 long long 的问题应该切掉了。
T2 瞅几眼感觉不可做就直接打一个暴力。
T3 差不多能看出来做法,但没思路,暴力打不出来。
T4 根号做法被卡掉了,只能再瞅一瞅性质。注意到如果每个数字都出现 \(k\) 次,那么此区间和一定是 \(k\) 的倍数,但这并不充要。联想到前几天模拟赛的一道题,其中异或关系也是必要条件,所以我们考虑类似做法,发现可以一样的随机映射。但是当 \(k\) 较小时会发生冲突,所以多映射几组应该可以,感觉会有点卡常。
\(\text{9:42}\):开始打 T4。
\(\text{9:45}\):降智了,发现不用线段树,可以用树状数组,常数减小,好好好。
\(\text{10:30}\):注意到开 map 可能会炸空间,索性写一个离散化。
\(\text{11:00}\):开始写 T3 暴力,复杂度 \(O(n^2\log n)\)。
\(\text{11:30}\):发现会了 T3 正解,开始改成正解。
\(\text{12:00}\):没调完,可惜的,交了暴力上去。
最后 \(100+50+60+100=310\) 拿下 rk1,幸运的。
中午去换了只兔子,可爱的。
吃完饭改题,发现 T3 初值不知道什么删掉了,改上去就过了,可惜的。
T2 是神秘数位 DP。
\(\color{royalblue}{CF1749D\ Counting\ Arrays}\)
不难发现存在一种通解使得任意序列删完,即每次删第一个,因为 \(\gcd(x,1)\)。所以考虑一种序列是优美的当且仅当其只存在这种删除方式,对于 \(a_i\),当它被逐渐删除时会经过 \(1\) 到 \(i\) 的所有位置,为保证只有一种删除方式,必须满足 \(\gcd(a_i,j)\not=1\quad(2\le j\le i)\)。
所以只要保证 \(a_i\) 是 \(1\) 到 \(i\) 中所有质数的倍数即可,线性筛后方案是好求的,注意取模即可。
\(\text{Link}\)
\(\color{blueviolet}{CF1746F\ Kazaee}\)
注意到如果每个数字都出现 \(k\) 次,那么此区间和一定是 \(k\) 的倍数。对于这种必要条件可以进行随机映射来减小冲突概率(只要我必要条件足够多那就是充要),也是前几天刚学的 Trick,异或哈希。
\(\text{Link}\)
\(\color{blueviolet}{CF627D\ Preorder\ Test}\)
最小值最大一眼尝试二分,考虑如何验证,以一个节点为根设 \(f_i\) 表示走这个节点最大能走多少节点(每个节点点权都大于 \(mid\)),转移时累加所有子节点子树内都能走的贡献,并加上一个走一半的最大贡献。
\(O(n^2)\) 判断基础上,考虑换根优化,将所有完整能走的子树和最大(此时要维护次大)的一半拆分出来,从父节点向子节点换根 DP 时,由最大次大可以去除子节点贡献,然后就把子树外所有点当成另一个子树进行转移即可,跟以前做过一道题较为相似。
最开始没想出来如何处理换根,暴力打出来就会了,忘赋初值改掉就过了。
\(\text{Link}\)
尾声
吃饭摸鱼聊天。
听学长讲题,今天没咋摆,优秀的。
回家整理整理博客就睡。