#3 2023.10.23

290. 2022 ICPC Shenyang Regional Contest

D

绷。

C

显然有用的区间只有 \(2n\) 个,模拟即可。

I

对于 \(a_i < b_i\) 的,发现先手可以抢排名 \(\bmod 4\) 为 1 和 0 的。

对于 \(a_i \geq b_i\) 的,是交替拿。

fun fact : 有人平衡树写挂了,+18。我不说是谁 /tx。

L

有用的状态不会太多,直接爆搜。

F

假设 \({m+1 \choose 2}\) 是偶数。

考虑如何做 \((1,m)\) 这个矩形。可以看做要构造几个序列 \(v\),满足 \(\sum v_i = m\)\(2 \sum {v_i+1 \choose 2} = {m+1 \choose 2}\)。选大的贪心放即可。

A

对于一个区间 \([x,y]\) ,被选中的概率是 \(p = {y-x \over len}\)。对于两个不交的区间,贡献相当于 \(p_a \times p_b \times |mid_a - mid_b|\)。对于两个完全相等的区间,它的贡献是 \(p_a \times p_b \times {len \over 3}\)。所以手动把区间劈开即可。

fun fact : 会搞出类似 \([x,x]\) 的奇怪区间。正解是特判掉这种情况。有人不想特判,手动把 \([x,x]\) 修成了 \([x,x+\epsilon]\)。精度爆了没草过去。

E

不是边双,等价于有割边。考虑枚举割边集合 \(E\)。相当于 \(E\) 把图分成了若干个连通块,分别是 \(a_1,..,a_k\),每个连通块内可以乱连,再搞定 \(m\) 条边的限制,贡献为 \(2^{-m + (k-1)}\prod 2^{a_i \choose 2}\)

缩完点之后背包转移即可。

H

什么板子题。。

建出 PAM,发现 \(P,Q,P+Q\) 一定在一条链上。更进一步地,设 \(P+Q = S\) 的最小周期是 \(T\),则 \(S\)\({|S| \over |T|} -1\) 的贡献(大概是这样吧。

G

草怎么不会这个题。

考虑一个确定的 \(a\)。构造一棵树 \(t3\) 包含 \(t2\) 的所有边和点,并对于每个点 \(u\),额外加上 \((u,u',dis1(u,a))\)。答案就是 \(b\)\(t3\) 上的最远点的距离。

考虑动态维护 \(t3\) 的直径。用线段树维护 dfs 序在 \([l,r]\) 内的直径。把 \(a\)\(t1\) 上移动,相当于 dfs 序上的区间加。注意到加一整个区间并不影响直径端点。做完了。

B

牛逼题。首先答案的上界是 \(\sum min(2^{len},n-len+1)\)。考虑如何取到这个上界。

\(k\)\(2^k+k-1 \leq n\) 的最大的数。在模 \(2^k\) 意义下,\(i\)\(2i\)\(2i+1\) 连边。这个图有哈密尔顿路,记为 \(path\)。构造一个新的序列 \(seq\)\(seq_i = 2path_i + (path_{i+1} \bmod 2)\)。容易发现 \(seq\) 是模 \(2^{k+1}\) 意义下的一个环。

\(seq\) 的基础上,把模 \(2^{k+1}\) 分成若干个环。具体地可以采取 \(nxt_{seq_i} = nxt_{seq_{i+1}},nxt_i = nxt_{i \ XOR \ 2^k} \ XOR \ 1 ( i \notin seq)\) 构造。

然后不断合并环,造出一个 \(size+k \geq n\) 的大环,就做完了。

J

好像会了。

大概就是说一次操作对应一个置换,所以把大矩形的行和列重新排列一下,就会变成很多个小矩形小矩形拼成了一个大矩形,每个小矩形对应的横坐标是一个连续段,是原排列上的一个环,纵坐标同理。所以一次行操作就是把和这行有交的小矩形分别循环移位。

考虑一行小矩形。如果它们的宽是 1,则列操作对它们没有任何影响,行操作的贡献是每个小矩形的最小正周期的 lcm。然后就可以把这行删了。列同理。

所以剩下的全是长宽都 \(\geq 2\)小矩形

然后用题解里的 \(L\) 形操作,可以在不影响其他小矩形的情况下,把当前小矩形变成每个可达状态。可达状态由是否有重复元素决定。若有重复元素,贡献是 \({n!m! \over {\prod cnt!}}\)。若无重复元素,在不更改奇偶性的情况下,贡献是 \({n!m!\over 2 \prod cnt!}\)

所以大概的想法是先确定每个小矩形的奇偶性,再进行 \(L\) 操作。长宽都是奇数的一定改不了。长宽有一个是奇数的,就把偶数置换环和 0 连边。长宽都是偶数就把行置换环和列置换环连边。最后的方案数是 \(2^{生成森林的边数}\)

K

咋是几何。在看了。别急。来了来了。

首先显然选的一定是一个凸包(可能有共线)。

那考虑凸包不是一根棍的情况。预处理出 \(ok_{i,j}\) 表示 \(i\)\(j\) 的连线是否完全在多边形内部。枚举凸包最左下的点 \(i\),把 \(ok_{i,x} = 1\) 的点拿出来按照极角排序。设 \(dp_{x}\) 表示当前凸包终点是 \(x\) 的方案数。转移 \(dp_y \leftarrow dp_x\) 当且仅当 \(x\) 极角序小于 \(y\)\(ok(x,y)\)。注意要保证它不是个棍,所以再加一维 0/1。

再考虑凸包是一根棍,那就把极长的棍拿出来就随便做了。

感觉是个签到几何题啊,怎么过的人这么少(?。

M

wtf。

291. cf1253f Cheap Robot

对每个点求出到它最近的充电桩 \(p_i\)\(dis_i\)。对于每条边 \((u,v,w)\),连接 \((p_u,p_v,dis_u + dis_v + w)\) 的边。kruskal 重构树即可。

292. cf625e Frog Fights

模拟题。用个堆记录创飞的时间,每次挑最小的即可。

293. cf1286e Fedya the Potter Strikes Back

实际上就是每个前缀的 border。考虑前缀 \(i\) 的 border 的起始位置集合 \(S_i\)。发现 \(S_{i+1}\) 是先把 \(S_i\) 踢掉一些东西,再加一个 \(i+1\)。注意到踢掉的东西是 \(i\) 的 fail 链上,\(s_{j+1} \neq s_{i+1}\) 的。开 26 个并查集暴力踢就行了。

294. cf587f Duff is Mad

啥乱题。

考虑一个单次询问 \(O(|S_k|)\) 的做法。相当于对 \(k\) 的每个节点,问 \([l,r]\) 的终止结点在它的 fail 树祖先链上出现了几次。离线下来 dfs ,用 \(O(\sqrt n) - O(1)\) 的单点加区间查分块可以做到 \(O(q|S_k|)\)

再考虑对于一个串 \(k\),解决关于 \(k\) 的所有询问的 \(O(n)\) 的做法:把 \(S_k\) 所在的点设为 1,\(q(i,i,k)\) 就是 \(edpos_i\) 的子树和。

拼起来就过了。

295. cf896e Welcome home, Chtholly

如果整体做 1 操作,假设是减 \(x\),值域为 \(m\)。容易得到两种做法。

第一种是按题意模拟,复杂度是 \(O(m-x)\),可以让值域减少 \(x\)

第二种是假装所有数都减了 \(x\),然后把 \(\leq x\) 的东西补回去,相当于平移数轴上的位置。复杂度是 \(O(x)\),可以让值域变成 \(max(m-x,x)\)

所以当 \(m > {x \over 2}\) 的时候可以使用第二种,否则用第一种,相当于用 \(x\) 的代价把值域减少了 \(x\)

套个分块做完了。

296. cf1801e Gasoline prices

序列上的版本就是维护 \(\log n\) 个并查集,第 \(i\) 个并查集的第 \(j\) 个点代表 \([j,j+2^i)\)。只会被合并 \(O(n \log n)\) 次,就做完了。上树就是把这个并查集搬到树上,没啥意思。可能需要维护一个反着的并查集。

297. The 2022 ICPC Asia Hong Kong Regional Contest

没打过 jiangly 和 larryzhong /ll。

H

绷。

fun fact : 有人英语不好理解不了题面,瞪了 5min 才结合样例理解这个题在干啥 /cy。

K

先排序和去重,答案一定 \(\leq a_1\)

如果答案等于 \(a_1\),要求是 \(a_2 \geq 2 a_1\)

否则枚举 \(a_1\) 有没有取模。取模的话是 \(a_1 \bmod ([{a_1 \over 2}] + 1)\),不取模的话,其他数显然不会取模到 \(< a_1\),所以就是把所有 \(> 2 a_1\) 的数变成 \(a_1\) 之后再取 gcd。

fun fact : 有人开场就写了这个题,然后 +3 /cy。

A

大概就是设 \(f_u\) 表示 \(u\) 子树的答案。转移就是 \(f_u = 1+ max(secmax \ f_v,max \ f_v -1)\)

E

扫描线。枚举 \(r\)。扫到当前点如果有限制,相当于 \(ban\) 掉一个区间的 \(l\)

F

数位长显然不会差 \(>2\)。暴力枚举。

L

显然小区间完全吊打大区间。考虑每次扔没被扔的集合里最大的那个。设 \(len\) 表示它能接受的最大长度。然后找一个长度 \(\leq len\) 的最长区间扔了就行了。

B

注意到黑的只有一个连通块,那就只数白的连通块个数。白的有一个大的连通块。对于其他的白连通块,一定不存在右下的锯齿状物。所以枚举作为白连通块右下角的点,贡献就是这行这列不能删它,下一行下一列把它封住的概率。

C

\(n < m\)。特判掉两个奇数和 \(2^n < m\) 的情况。我的做法比较鬼畜,令 \(d = min(60,n)\),嗯随 \([{m \over 2}]\)\([0,2^d)\) 的数,构成序列 \(a\),满足 \(a_i,a_i \ XOR \ (2^d - 1)\) 都互不相同。把 \(a_i\) 塞进每列,\([d,n)\) 继续嗯随。然后把这些东西复制一遍再每位异或 1。如果 \(m\) 是奇数就再塞一条 00001111。多随几次就过了(。

D

答案相当于 \((a,b)\) 点积 \((white,black)\),所以只有凸包上的点有用。暴力合并凸包,查询的时候三分。现场没人过 /jy。

J

相当于计算 \(\sum_{i=0}^{n-1} max(\sum_{j=0}^{n-1} (i \oplus j),i \times n)\)

注意到里面这个东西等于 \(\sum_{bit} 2^{bit} (bit \in i ? n - c_{bit} : c_{bit}) = i \times n - \sum_{bit}2^{bit}c_{bit} (bit \in i ? -1 : 1)\)。其中 \(c_{bit}\) 表示 \([0,n-1]\)\(bit\) 位是 1 的个数。所以上面那个 \(max\) 只取决于后面这坨东西的正负性。

然后发现后面这坨东西的正负连续段不会太多(???),大概只有 \(\log\) 个,就暴力分治 \(solve(l,r)\),每次找出 \([l,r]\) 区间的后面这坨东西的最小值和最大值,如果正负性相等就直接算。

I

做法满天飞的一个题。似乎这个题的各种解法都依赖于求出若干对关键点,然后扫描线求答案。因为关键点对远大于查询,所以扫描线的时候用分块。

题解的做法是把平面分 \(\log V\) 次块,第 \(k\) 次分块的边长是 \(2^{k}\)。目标是求出距离在 \([2^{k-1},2^{k})\) 里的关键点对。加入点的时候暴力扫周围的 3*3 的块更新答案。如果找到了一个 \(j < i\) 满足 $dis(i,j) < 2^{k-1} $,就把下标 \(< j\) 的点全扬了。这样能保证每个块只有 \(O(1)\) 个点。

还有一种正解的做法也是把平面分 \(\log V\) 次块,第 \(k\) 次分块的边长是 \(2^{k}\)。然后把每对相邻的块按照下标排序,枚举相邻的 \(O(1)\) 个点,这样也是对的。考虑每个可能优的点对,当它们在同一块或者相邻块的时候,它们两个中间不会有太多点。实际操作可以枚举 10 个点左右。

然后就是经典的乱搞做法:随机一个角度,然后排序,枚举原序列和排序后序列上的点硬草。感觉很伟大!

G

你妈,看了一天没看懂。傻逼。

298. LG9747 「KDOI-06-S」签到题

发现最后的数一定是整个区间的 OR。再发现一个区间合法,当且仅当存在一个数是区间 OR,并且存在一个和这个数不交的区间 OR 起来是 OR。

枚举每个数作为区间的 OR,二分出 L,R 是会让 OR 变化的端点。再二分出 \(l,r\) 满足 \(OR \ [l,i) = a_i\)\(OR\ (i,R) = a_i\)。这样的 \([l,r]\) 就是机场区间。然后扫描线即可。

299. arc147d Sets Scores

考虑一个变化序列 \(x_i\)。记 \(p_i\) 是当 \(i\)\(S_1\) 中,序列变化量是 \(x\) 时,\(i\)\(n\) 个集合里的出现次数。再枚举 \(S_1\)。答案就是 \(\sum_x \sum_{S_1} ((\prod_{i \in S_1} p_i)(\prod_{i \notin S_i} (n - p_i))) = \sum_x n^m = m^{n-1} n^m\)

300. arc147e Examination

忽略次数限制,判定一个序列能否合法。相当于把 \(v_{a_i}\) 加一,$v_{b_i} $ 减一,然后任意后缀和都要 \(\geq 0\)

先把一定要换的东西拉出来,考虑加进一个 \(a_i > b_i\) 的数,相当于把 \((b_i,a_i]\) 这段区间加一。所以从后往前扫,如果遇到前缀和是负数,就挑 \(b_i\) 最小的区间放。

301. arc147f Again ABC String

考虑把题目抽象成为有三个人在一个长度为 \(x + y + z+ 3\) 的环上走,分别位于坐标 \(0,x+1,x+y+2\)。每次可以选一个人往前走 1,要求不能有两人重合的方案数。

\(f(a,b,c)\) 表示三对人分别至少重合 \(a,b,c\) 次的方案数。注意到如果 \(a + b + c \geq 2\) ,则 \(f(a,b,c) \bmod 2 = 0\)。原因是当它们第一次重合后,对下一个状态会产生 2 的贡献。

所以只需要计算 \(f(0,0,0) - f(1,0,0) - f(0,1,0) -f(0,0,1)\)\(f(0,0,0) = 3^n = 1\)

\(f(1,0,0)\) 为例,相当于第一个人的步数减去第二个人的步数在模 \(x+y+z+3\) 意义下为 \(x+1\)。答案就是 \([t^{x+1}] ((t + 1 + {1 \over t})^n \bmod (t^{x+y+z+3} -1))\)。每一轮可以让步数差加减 1 或者不变。而如果一个情况里,第一个人和第二个人第一次相遇后,如果一直动第三个人,在答案式子里的贡献就是 1。否则如果动了第一个人和第二个人,假设它们最后距离差为 \(d\),那么有 +d 和 -d 两种方案,贡献为 0。

现在问题变成了如何计算 \([x^n] (x + 1 + {1 \over x})^m \bmod (x^v -1) = [x^{m+n \bmod v}](x^2 + x + 1)^m \bmod (x^v -1 )\)。注意到 \((x^2 + x + 1)^{2^i} = (x^{2^{i+1}} + x^{2^i} + 1)\)。使用根号分治,如果 \(v\) 不大就暴力转移。否则变成计算 \([x^{m + n \bmod v}](x^2 + x + 1 )^m \bmod (x_v-1)\),枚举 \(k \bmod v = m+n\),计算 \([x^k](x^2 + x + 1)^m\),这个可以简单用数位 dp 求出。

302. gym104369e New but Nostalgic Problem

先建个 trie,对于点 \(u\),计算 \(lcp \leq u\) 的最大集合大小。发现严格小于等 \(u\) 的串可以随便选,大于 \(u\) 的每个 trie 结点至多有 1 个串经过。dfs 就行了。摇奖手速也太快了吧,吓人。

303. gym104369f Traveling in Cells

\(k\) 个线段树一起线段树二分就行了。怎么花老师还写这种题啊。

304. gym104369m Computational Geometry

假装下标是模 \(n\) 意义下的。枚举劈开的两个点 \(i,j\),如果把一边劈成棍子了肯定不行,否则就是两个区间内两两 dis 的最大值。随便更新。摇奖手速也太快了吧,吓人。

305. gym104369j X Equals Y

先讲讲我的垃圾做法。相当于构造一个序列 \(z_0,..,z_{len-1}\),满足 \(z_i < min(a,b),\sum z_i a^i = n,\sum z_i b^i = m\)

首先搞定 \(len=1\) 的情况。然后是 \(len \geq 3\),可以暴力枚举 \(a,b\) 塞进哈希表里。

然后是 \(len = 2\)。限制转化为 \(z_1 a + z_0 = x,z_1 b + z_0 = y,len=2,z_0 < min(a,b)\)。先把能让序列长度为 2 的 \(a,b\) 区间求出来。枚举 \(z_1\),可以得到 \(a -b = {x - y \over z_1}\)。把 \(a\) 的区间和 \(b\) 的区间取个交,此时条件变成了 \(x \bmod a < a - {x - y \over z_1}\)。用扩展欧几里得算即可。

似乎题解更高妙。把 \(a\) 范围写出来之后就不用 check 了。我是傻逼。

306. gym104369h Canvas

显然 11 没用。那不妨考虑对于一个点 \(u\),连边 \(u_2 \rightarrow u_1\)。对于 \(x_i = 1\),连接 \(l_1 \rightarrow i\),否则连接 \(i \rightarrow l_2\)。然后缩点,每个入度为 0 的块选一个点变成 1 即可。

307. gym104369g Swapping Operation

考虑把会让前缀和后缀 and 变化的点称为关键点!

枚举分界点 k。如果交换的两个点和两边的关键点不交就屁用没有了!那就枚举交换的是哪两个关键点,或者是哪个关键点,最后可以写成 \(\max f(1,i-1) \& f(i+1,k) \& a_j,j < k,j \notin keypoint\)。发现前面两个的个数不多,就暴力枚举!

308. gym104369l Classic Problem

进行一个 B 姓算法的猛日。做完了。

309. cf722f Cyclic Cipher

身败名裂题。

考虑一个区间两两有解就一定有解。区间内两两有解判定是容易的。套个双指针即可。

310. cf513f2 Scaygerboss

二分答案之后建个图,能到的连边,跑个最大匹配即可。

311. cf1119f Niyaz and Small Degrees

身败名裂 \(\times 2\)

大概是对于一个 \(k\) 有一个显然的 dp,大概是一个点选儿子里前 \(k\) 个最小的。注意到当 \(k\) 增大,只有 \(deg \geq k\) 的点会受影响。

312. cf1553I Stairs

怎么这玩意 3400 啊。

显然连续段是极长的。每两个极长的连续段之间有一个 \(> 1\)\(gap\)

搞出 \(gap\) 集合 \(S\),设 \(S\) 会把数列分割成 \(s_1,s_2,...,s_n\),答案就是 \(\sum_{T \sub S} (-1)^{|S| - |T|} 2^{\sum t_i > 1} (|T|+1)!\)。分治算即可。

313. xsy5264 冬眠

发现每个不合法三角形存在两条 1 边。尝试数每条 1 边一共在多少个三角形里出现过。发现只跟 \(n\) 的奇偶性,1 边两个端点的奇偶性有关。答辩分类讨论题。注意判断一下等边。

314. xsy5265 假期

大力猜想答案是个团。就搞个最大团就行了。

315. xsy5266 刚刚结束

把每个点 XOR HASH,满足每个颜色 XOR 和为 0。发现更改一个点相当于若干子树 XOR。查点容易。

就变成了带时间顺序的矩形 XOR,矩形 XOR 和。注意到修改矩形是 \(1 \times n\),查询矩形是 \(n \times 1\) 的,所以直接离线 cdq 扫描线。

316. uoj821 【UR #26】石子合并

考虑合并两个序列。把两个序列的非严格前缀最大值拎出来,变成很多很多个区间。发现就相当于这些区间归并,第一关键字是第一个元素的大小,第二关键字是左右。并且合并之后新序列的区间还是这些区间。

所以找出所有区间,对于第一个元素相等的区间有严格的顺序。考虑容斥掉长度的限制,每种区间是个插板,就做完了。

317. uoj823 【UR #26】铁轨回收

我是全场一血!!!!!!!!!111111

困了不想写题解了,可以去看官方题解或者直接咨询 zak 本人或者咨询我

318. arc146d >=<

转成两个限制,分别是

  • 如果 \(a_p \geq x\),则 \(a_q \geq x\)
  • 如果 \(a_p \geq x+1\),则 \(a_q \geq x+1\)

反向也一样。

然后扔进队列里,所有的限制都满足。

319. arc146e Simple Speed

从小到大 dp 连续段。设 \(f_{i,j,0/1/2}\) 表示前 \(i\) 种数,有 \(j\) 个连续段,左右两边有几 0/1/2 个是 \(i\)。随便转移。

posted @ 2023-10-30 21:22  ZSH_ZSH  阅读(133)  评论(0)    收藏  举报