#5 2023.11.21
379. The 2nd Universal Cup. Stage 9: Qinhuangdao
J
xwp 怎么还在知乎撒狗粮啊。草草草草。图图了 /dao。
C
求出最长的 \(len\) 满足 \([l,l+len-1] = rev([r-len+1,r])\)。记 \(l + len = x\) 。大概就是找一个最大的 \(z < y\) 满足 \([x,z]\) 是回文串。这个可以乱马拉车然后线段树二分。之后加上 \(lcp(z + 1,r-len+1)\) 的贡献就行了。\(r - len\) 那边同理。
H
厉害题。
L
orz zayin。
考虑逆排列,原排列上的子排列就对应逆排列的一个前缀,满足这个前缀的值域是满的。
发现交换逆排列上的值为 \(x,y\) 的两个数(假设 \(x\) 比 \(y\) 先出现),就是在一些点把 \(x\) 图图了换成 \(y\)。发现对于每个点,只有 \(O(1)\) 对 \((x,y)\) 会产生贡献。
暴力统计,就做完了。
K
黑白染色,黑的按照左上斜和右上斜分别编号,每个编号对应一个格雷码,然后拼起来。
白的就是旁边的黑的 OR 再取反。
380. arc168d Maximize Update
设 \(f_{l,r}\) 表示仅考虑被 \([l,r]\) 完全包含的区间的答案。考虑最后一个被选的区间覆盖了点 \(k\)。那就可以把所有包括 \(k\) 的区间都图图了,贡献就是 \(1 + f_{l,k-1} + f_{k+1,r}\)
381. arc168e Subsegments with Large Sums
当场进行一个二分答案。设 \(f(i)\) 表示选出 \(i\) 个不交的 \(sum \geq S\) 的区间,至少需要多少
382. arc168f Up-Down Queries
考虑维护数列 +1 的点集。每次对 \(x\) 进行操作,就相当于扔两个 \(x\) 进去,然后把集合里最小的点踢了。
然后能抽象成一个费用流模型(????。有点太色了。
之后就暴力模拟费用流就行了。
383. arc142d Deterministic Placing
等价于把原树剖成单向链。满足链头不和链头相邻,链尾不和链尾相邻,链头链尾都不和另外的链的身相邻。
然后每个结点有 8 个状态,大力转移即可。
384. arc142e Pairing Wizards
可以写成 \(a_x,a_y \geq min(b_x,b_y),max(a_x,a_y) \geq max(b_x,b_y)\)。
大力切糕。
385. arc142f Paired Wizards
orz zyf
大概可以分成
- \((a,b) = (c,d)\)
- \(a = c,b \neq d\)
- \(a \neq c ,b = d\)
- \((1,1),(2,2)\)
- \((1,2),(2,1)\)
转化一下,变成 \(S - {cx + 1 \choose 2} - {cy + 1 \choose 2}\)。然后第一种没救了,第二种和第三种一定取得是后缀,第四种取得也一定是后缀,第五种对 \(S\) 的贡献相等。
所以枚举第五种对 \(cx\) 的贡献,再枚举选了几个第四种,剩下的可以预处理出 max。
386. loj3695 「JOISC 2022 Day4」鱼 2
比较色的题。
考虑对于一个区间分别维护前缀和后缀信息。以前缀为例,如果这条鱼吃不到左端点,它就废了。否则,它一定能吃到一个前缀,并且前缀数量不会太多,只有 \(\log V\) 个。看起来转移很色,有点困了懒得写了。
387. loj3488 「JOISC 2021 Day1」IOI 热病
枚举第一个点的方向,发现其他的点的方向是唯一的。
然后就使用类似 dijkstra 的方法更新,每次取出最小的点。和某个点交只有三种情况,分别是对撞,\(x + y = k\) 或者 \(x - y = k\),三种情况分别找出和这个点交最近的点。以 \(x + y = k\) 为例,大概就是找出 \(x+y = k\),$x $ 在某个范围内,\(y\) 最大的点。可以用 set 简单处理。
388. loj3487 「JOISC 2021 Day1」特技飞行
这尼玛啥玩意啊草。
大概就是说,当场爬山。改进:每次交换操作是交换两条边,估价函数采用最小的几个角拼起来的奇怪函数。然后当场跑,然后就过了(???。受不了了。
389. loj3491 「JOISC 2021 Day2」道路建设
先把贡献转成经典的 \(max(|x_1 - x_2|,|y_1 - y_2|)\)。考虑先搞出第 \(k\) 大的边权值是多少。二分答案,那就对于每个点,就对应一个二维数点。用滑动窗口 + BIT 即可。
然后输出是容易的。
有种厉害做法,是二分答案 \(mid\) 的时候,把平面劈成 \(mid \times mid\) 的块,查询的时候八连通暴力找。这样是 \(O(n)\) 的,很厉害。厉害吗?不知道啊,真的厉害吗?但是看起来很厉害。
390. loj3490 「JOISC 2021 Day2」逃跑路线
如果路程大于等于两天,答案是容易的。
如果路程等于一天,对于每个点,先跑一遍 $T =0 $ 的 \(dijkstra\)。同时,对于每条边,有一个被扬时间,对每个被扬时间 +1 也跑 \(dijkstra\)。这样会跑 \(O(m)\) 次,总复杂度 \(O(n ^ 5)\)。
但是我们认为这样还不行!枚举每条边 \((u,v,w)\) 作为答案路径里顶到上界(即时间增加后第一条爆)的边,相当于从 \(u\) 终止时间为 \(C_{u,v} - w\) 跑一遍反着的 \(dijkstra\),从 \(v\) 起始时间为 \(C_{u,v}\) 跑一遍正的。然后枚举可能的 \(x,y\),答案就是 \(disu_{x} + w + disv_y\),要求 \(x\) 的出发时间 \(\leq C_{u,v} - w - disu_x\)。这样就是 \(O(m n^2 polylog(n))\) 了。
391. arc141c Bracket and Permutation
392. arc141d Non-divisible Set
393. arc141e Sliding Edge on Torus
394. arc141f Well-defined Abbreviation
判定非常神仙。
对于一个 \(S_i\),贪心地用其他 \(S_j\) 乱删它。如果删完了,说明 \(S_i\) 没用了。否则说明 \(S_i\) 本身就是非法串。
然后判定条件是不存在 \(S_i = A+B,S_j = B+C\),且 \(A \neq C\)。
证明:
- \(A+B+C\) 是非法串。
- 归纳证明每个串的终止态唯一。考虑串 \(T\) 删掉 \(S_i\) 得到的子串 \(T_i\),和删掉 \(S_j\) 的得到的子串 \(T_j\)。若删掉的区间有交,则 \(T_i = T_j\)。否则这两个串的终止态等于 \(T - S_i - S_j\) 的终止态。
然后就可以乱做了。先贪心删看会不会寄。然后就枚举 \(B\) 作为后缀,塞进哈希表,再枚举 \(B\) 作为前缀查一下就行了。