#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\) 作为前缀查一下就行了。

posted @ 2023-11-24 15:12  ZSH_ZSH  阅读(51)  评论(0编辑  收藏  举报