2022-12-24 #19 也不愿在拥抱过浓墨重彩的热烈后 被迫离开
——霾《八重回归》
昨天打了八个小时文明六,自入手后第一次胜利啊!(王子难度,朝鲜科技胜利)
感觉一整把打下来还有很多瑕疵。。。
upd:昨天与今天加起来打了十八小时。
昨晚 vp 了一下 2022 CCPC Guilin。
B 题没写完有点可惜。
感觉这场好难啊,被签到题整自闭了。
93 I Invincible Hotwheels
其实也不是很难,但我为啥不会。。。
类似 CF1483F Exam 地枚举长串,并枚举其一个前缀,取出最长、次长的出现过的后缀,那么最短串、次短串一定取自这些串。(找这两个串只用 ACAM 预处理一下)
不妨把最短串次短串对应区间塞到一个集合 \(S\) 里,并令一个区间的颜色为其对应串的编号,那么一个区间 \([l,r]\) 能成为短串当且仅当:
- 包含它的区间存在,且均为同一颜色;
- 该串所有出现位置均作为最长、次长后缀。
第一个就是个二维数点,第二个在 fail 树上标记一下就好了,复杂度 \(O(n\log n)\)。
94 H Hysteretic Racing
比较简单,没时间开。
注意走一个环后代价固定,所以我们可以只考虑前 \(n\) 步。
一条路径的代价就是 \(\sum_{i=1}^n a_i\max_{j=1}^ib_j\) 状物,维护可以考虑使用兔队线段树。(习惯叫这名字了)
那么基本就做完了,区间推平 \(1\log\),区间加 \(2\log\),线段树二分 \(2\log\)。
回忆兔队线段树方法:
- 若前缀最大值 \(v\) 小于左儿子的最大值,那么其不会影响到右儿子,递归左儿子解决;
- 否则,其会将左儿子推平,只需递归右儿子。
95 J Permutation Puzzle
虽然这是个签到,但我觉得这题也挺难(其实是与 CF1718D Permutation for Burenka 一模一样的套路)
使用拓扑可以求出每个位置放置的数的上下界,若没有 DAG 限制,我们可以直接套用经典贪心。(把区间按右端点排序扫描,每次取最小的值)
但是事实上上述贪心无解则原问题无解,若有解一定是原问题的解。因为 DAG 的性质,若 \(u\rightarrow v\),则 \(L_u+1\leqslant L_v,R_u+1\leqslant R_v\),\(u\) 能匹配到的数一定小于 \(v\)。
96 牛客练习赛 102F 黑鸟
这题为啥没人改。
先用线段树判个无解。
将双端队列看成两个栈,单独处理出匹配关系。结论:令失配的删除操作数量为 \(k\),我们只会 pop 掉前 \(k\) 次加入操作。
感性理解一下,失配 pop 操作时某个栈一定为空,此时另一个栈 push 的数恰好是一段连续的时间。
有了这个结论就好做了,枚举左端点扫描线计算失配的 pop 操作数量,再枚举右端点扫描线线段树二分一下,复杂度 \(O(n\log n)\)。
97 uoj#418. 【集训队作业2018】三角形
我们不妨称“操作 \(x\)”为放 \(w_x\) 个石子在 \(x\) 结点上,并将其儿子所有石子回收。
先考虑全局答案,即操作 \(1\) 需要的代价。
那么所有结点肯定都操作过依次,把这个操作序列拿出来,那么无非是解决一个这样的问题:
定义二元组加法为 \((a_1,b_1)+(a_2,b_2)=(a_1+a_2,\max(b_1,a_1+b_2))\)。有 \(n\) 个二元组 \((a_i,b_i)\),我们要任意排列这些二元组,最小化二元组之和的右值,这些加入一个结点前要保证其所有儿子都加入过。
“加入一个结点前要保证其所有儿子都加入过”限制很难处理,但我们有“加入一个结点前要保证其父亲加入过”的经典贪心。(monster hunter 贪心)
时光倒流,二元组加法只需稍微改改,然后每次取出全局最优,将其与父亲合并表示选了父亲后立即选这个儿子即可。
考虑怎么求每个结点的答案,我们把这个顺序预处理出来,线段树合并出每个结点的答案即可。
复杂度 \(O(n\log n)\)。
下午打了 InfOJ Beginner Round 3,遗憾不会 Div1 B 难度题。(会同复杂度做法,但常数大了一点点)
顺便一提,那场的构造题是平衡三进制的板板。
98 P8912 [RC-06] ijk
你可能疑惑博主为什么要写绿题题解,因为博主就是这么菜(
枚举三元组 \(ijk\leqslant n\) 的复杂度是 \(O(n\log^2 n)\) 的。
99 ABC283H Popcount Sum
这题不会做???这题不会做???这题不会做???这题不会做???这题不会做???
一个经典的转化是 \(\sum_k\sum_{i=1}^n[i\bmod m=r][i\bmod 2^{k+1}\geqslant 2^k]\)。
做到这步不会做了。
事实上:
类欧即可。
(最后一步与之前做过的 ARC111E Simple Math 3 一模一样)