ARC&AGC

ARC 部分一般会跳过 difficulty \(\geq 3200\) 的题。

ARC208

20251012

A,B 略。

ARC208 C

有意思数学题。

考虑若存在 \(n<C\),那么 \(n_0=X\operatorname{xor}C\) 一定是一个解。

考虑 \(\operatorname{highbit}(C)=2^k\)。如果 \(\operatorname{highbit}(n)\leq k\),那么 \(X<2^k\),所以 \(n_0>X\)。这里 \(2^k\leq n<2^{k+1}\) 时,注意到 \(n\operatorname{xor}C<2^k\)

于是考虑 \(n>C\)。此时 \(n\operatorname{xor}C<2n\)。分类讨论:

  • \(X=n\operatorname{xor}C<n\)
    • 判断一下是否满足要求。
  • \(X=n\operatorname{xor}C-n\)
    • 此时 \(X=n+C-2(n\operatorname{and}C)-n\)
    • 于是 \(m=\frac{C-X}{2}=n\operatorname{and}C\)
    • 于是判断是否 \(m\subseteq C\)。如果是,那么为了满足 \(n>C\),构造 \(n=m+2^{50}\)
ARC208 D $^?$

这种构造到底是怎么想出来的。完全没有头猪啊。特别是 \(n\) 是偶数。

我们观察到,如果矩阵 \(a(i,j)\) 是满足要求的,那么对于任意排列 \(p\),对下标做置换的 \(a(p(i),p(j))\) 满足要求。

于是直接构造 \(a(i,j)=(i+j-1)\bmod n+1\),然后可以找到一个排列 \(p\)

当然,还有一种做法是(赛时想法),把矩阵表示为 \((i,j,a(i,j))\)\(n^2\) 个三元组,然后变成构造 \((i,a(i,j),j)\)。通过一些奇妙思考构造。

然后是 \(n\) 是偶数。存在一种较为直接的思考是 @FFToroto 的完全图边染色。

然后这里复述一下官方题解的做法:

ARC207

20251005

ARC207 A

dp。考虑从前到后填数。

注意到一个匹配的贡献只和两端点有关,所以我们贡献提前计算。

\(f(i,j,k)\) 表示 dp 到第 \(i\) 次,前面有 \(j\) 次还没匹配,总贡献为 \(k\) 的方案数。

然后枚举第 \(i\) 次是 \(a<i,a=i,a>i\)\(i\) 匹配。

对于 \(a=i\)\(>i\) 的位置匹配,一种做法是直接枚举个数。

但是注意到方案数其实可以分步 dp 求解。也就是类似完全背包。

复杂度 \(O(n^4)\)\(O(n^5)\)

细节调了半个小时。

ARC207 B

构造。考虑如下构造思路:

对于点 \(i\),让 \(i\) 两步之内到达除了 \(n+1-i\) 之外的所有点。

\(S=\{i|i\in[1,\frac{n}{2}]\},T=\{i|i\in(\frac{n}{2},n]\}\)

然后 \(i\in S,j\in T,i+j\neq n+1\) 连边 \((i,j)\)

ARC207 C

3log 暴力:注意到对于固定的 \(r\)\([l,r]\) 的区间或只有 \(O(\log V)\) 种。

所以 dp 有 \(f(i,j)\) 表示 dp 到 \(i\),区间或的 popcount=j 的答案。

然后转移是一个二维数点。直接在线做是 \(O(n\log^2n\log V)\)

离线扫描线少一个 \(\log\)

注意 popcount 可以到 \(30\) 而不是 \(29\)。。


\(O(n\log V)\) 做法。可以改计数(CF2038 D)。

直接用数据结构找上一段的结尾在哪里还是太奢侈了。考虑分步 dp。

注意到固定 \(l\),段的按位或的不同个数只有 \(O(\log V)\) 个,因为 不同按位或的 popcount 也是不同的 所以一共 \(O(\log)\) 个。固定 \(r\) 同理。

所以我们维护:\(f(i,j)\) 表示最后一段的右端点是 \(i\)\(v(i,j)\) 表示以 \(i\) 为右端点,popcount=j 的段的 \(\text{OR}\) 值(根据上文,是唯一的)。

然后转移的时候,只要找到左端点是 \(i+1\) 的,第一个按位或比 \(v(i,j)\) 大的段进行转移。

有点绕。换句话说就是:

\(\text{OR}[l,r]\) 表示 \(a_l\operatorname{OR}a_{l+1}\cdots \operatorname{OR}a_r\)

\(f(i,j)\)\(f(k,w)\) 转移,其中 \(k>i,\text{OR}[i+1,k-1]<v(i,j)\leq \text{OR}[i+1,k]\)\(w=\text{popcount}(\text{OR}[i+1,k])\)

这样每个状态只有 \(\leq 1\) 次转移,只要精细实现就是 \(O(n\log V)\) 的。

然后考虑不开新段的转移。那么有 \(f(i,j)\to f(i+1,\operatorname{popcount}(j\operatorname{OR}a_{i+1}))\)

于是复杂度就是 \(O(n\log V)\) 的。

精细实现的细节:预处理出 \(L(i)\) 表示固定 \(l=i\) 的段,每个按位或值的,第一个右端点集合。然后在转移的时候双指针即可。因为 popcount 更大的,(在这里)按位或值显然更大。

ARC207 D

二者称为 A,B。

首先有结论:A,B 都只会尽可能平衡的切,也就是最后留下的一定是中心部分。

于是我们直接忽略两侧的行列,只保留中间的 \(O(1)\) 行列,然后直接做 dp 即可。复杂度 \(O(\sum nm)\)

稍微说明一下。我们考虑当前先手切了一刀,后手要跟一刀:

  • 如果后手想要把最后的位置往两侧偏,意味着这样做可以让后手反败为胜:
    • 如果先手阻止(切对侧),那么是无法完成的。
    • 否则不阻止,意味着先手认为这样切可以反败为胜,那么矛盾。
  • 反之同理。

如果最后的几步分析不清楚,那么我们只要注意到,最后剩下的位置不会偏出中间的三行三列,于是最后剩三行三列的时候跑 dp。


更细节的分析:

我们想要把所有情况归纳到 \(n,m\) 奇偶不同的情况。

\(n=m=1\) 判掉。

考虑 \(n,m\) 同奇偶的情况,此时枚举先手四种操作,然后递归下去变为 \(n,m\) 奇偶不同。

假设此时 \(n\)\(m\) 偶。

首先一定不会偏出中间三行。

考虑博弈过程:

对于最后所在的列,根据结论,一定是最中间两列。

如果 B 操作到中间上面一行,那么 A 只要第一次操作第一行即可。

如果 B 操作到中间下面一行,那么 A 只要第一次操作最后一行即可。

于是:

  • 如果中间一行的中间两个位置有草莓,那么 A 一定可以通过先切左右拿到。

  • 否则,如果存在一列,中间上面一行和下面一行都有草莓,那么 A 同样可以通过先切左右拿到。

否则 A 无法胜利。因为 B 可以通过操作(对称切)把局面变回 A 仍然无法胜利的局面。

ARC206

20250922

A,B 略。

ARC206 C

好难绷啊。。

考虑任意一个位置的指向。考虑 \(a_x=y\)我们考虑最小的限制: 这样比较方便观察性质。

对于长度为 \(2\) 的限制,我们发现如果 \(|x-y|\neq 1\),那么,有 \(i<x,a_i=i+1\)\(i>x,a_i=i-1\)

所以全局最多有一个 \(|x-y|\neq 1\) 的情况。我们枚举这个位置。

否则我们枚举 \(a_i=i+1\)\(a_i=i-1\) 的交界位置。

赛时我一开始在想什么???在想最后树的结构长什么样,甚至在想括号匹配,一点没考虑固定一个位置的限制,从小的限制出发确定 \(a\) 的状态。

ARC206 D

平凡构造是 \(k,1,\cdots k-1,k+1,\cdots,n\)

然后考虑 \(k=0\) 当且仅当 \(n\geq 8\)

然后 \(k=1\) 当且仅当 \(n\geq 5\)

随便构造。

~ ARC206 E

ARC205

20250907

ARC205 A

首先有一个操作上界是第一步可以操作的方案数,然后我们发现,一定可以构造出这样的方案,然后做完了。

ARC205 B

仍然是考虑上界,一个点的黑色邻边和一开始的奇偶性必须相同。然后考虑在此限制上取到上界,我们发现一定可以通过调整法调整非上界的情况。

ARC205 C

显然合法当且仅当不同方向的段不交,并且同方向的段不包含。

一个简单的判断的方法是,按照 \(s\) 排序,要求 \(t\) 递增。

然后两个方向分别标号,做完了。

ARC205 D

dp 或者贪心。

考虑 \(f(x)\) 表示 \(x\) 子树内最多匹配,然后如果有一个子树的剩余点数超过其他的剩余和,那么需要拆掉其他子树的匹配来做。

ARC205 E

meet in the middle。对低 \(10\) 位暴力更新前缀和,高 \(10\) 位查询的时候再暴力枚举子集。

ARC204

20250908

ARC204 A

考虑这样操作有取 \(\max(C,\cdots)\) 的,我们可以枚举最后一次取到 \(C\) 的操作,这样最终的值可以表示为 \(\max_i v_i\)\(v_i\) 表示第 \(i\) 个操作取到 \(C\),之后都不考虑对 \(C\)\(\max\) 的答案。

做一个差分,答案是 \(F(R)-F(l-1)\)

\(F(R)\) 表示 \(\max_i v_i\leq R\) 的方案数。可以 dp,设 \(f(i,j)\) 表示 dp 到 \(a_i\),加入到了 \(b_j(j\leq i)\)\(\max_{k\leq i}v_k\leq R\) 的方案数。

然后转移就是 \(f(i,j)\to f(i+1,j)\) 以及 \(f(i,j)\to f(i,j+1)\)

ARC204 B

考虑对置换环 dp,然后考虑设 \(f(l,r)\) 表示当前环是原环 \([l,r]\) 部分的点。注意到一定存在一次操作,其端点是 \(l\)\(r\)。所以枚举另一点 \(k\)

然后有转移 \(f(l,r)=f(l,k-1)+f(k,r)+[a_l\equiv a_k\pmod n]\)

但是复杂度 \(O(n^3k^3)\),过不了。

然后注意到,我们其实只要枚举 \(a_l\equiv a_k\pmod n\)\(k\),以及 \(k=l+1,k=r\) 的情况就可以覆盖所有答案了。

因为一个没有贡献的操作是不急于做的,完全可以(通过 \(k=l+1,r\) 缩小边界)把机会让给有贡献的操作。

~ ARC204 C

ARC203

20250909

ARC203 A

注意到最优策略是,每组选一半人都赢,一半都输,然后注意 \(m\in\text{odd}\) 的时候还可以有一个赢。所以答案是 \(n\lfloor\frac{m}{2}\rfloor+[m\in\text{odd}]\)

ARC203 B

考虑如果有 \(>1\)\(1\),那么 \(0\) 可以随便移动,所以只要 \(1\) 的个数相同就行了。

如果有恰好 \(1\)\(1\),那么如果 \(1\) 在两端点,那么无法移动。特判一下。

ARC203 C

\(k< n+m\) 是简单的。

考虑 \(k=n+m\),分类讨论:

  • 一条长度为 \(n+m-2\) 的路径,随便打穿其他两堵墙,方案数 \(\binom{n+m-2}{n-1}\binom{n(m-1)+(n-1)m-(n+m-2)}{2}\)
  • 去除一个格子四周都被打穿的方案数(被算了两遍),枚举这个格子,有 \(\binom{n+m-4}{n-2}(n+m-3)\)
  • 考虑打穿长度为 \(n+m\) 路径的情况。
    发现路径一定是有恰好一次向左或向上。然后考虑向左的情况。
    这个向左操作的上一次和下一次操作都要是向下,所以我们先不考虑这个,这样路径方案数是 \(\binom{n+m-4}{n-3}\),然后插入这个“下左下”的方案数,要求后面必须有一个向右的操作,所以方案数是 \((m-1)\binom{n+m-4}{n-3}\)

所以答案是 \(\binom{n+m-2}{n-1}\binom{n(m-1)+(n-1)m-(n+m-2)}{2}-\binom{n+m-4}{n-2}(n+m-3)+(m-1)\binom{n+m-4}{n-3}+(n-1)\binom{n+m-4}{m-3}\)

ARC203 D

只考虑 \(n>2\),至少有 \(1\)\(0\) 的情况。

考虑 \(00\) 段最后只能变成 \(0\dots 0\),并且其他段无法变成全零段。

如果不存在 \(0\dots 0\) 段,可以简单分类讨论两侧的数:

  • \(0\{0,1\}^*0\),此时一定有 \(B=010\)
  • \(0\{0,1\}^*1\),有 \(B=01\)
  • \(1\{0,1\}^*0\),有 \(B=10\)
  • \(1\{0,1\}^*1\),有 \(B=11\)

所以我们先找到 \(A\) 中长度大于 \(1\) 全零的段,然后以这个分子情况考虑,发现两个这样的段中间填一个 \(1\) 就可以构造出来,设 \(c\) 是长度大于 \(1\) 全零的段的个数,中间的方案数是 \(3c-1\)

然后考虑左右两侧,讨论是类似的:

对于左侧不是全零段:

  • \(a_1=0\),那么 \(B_L=01\)
  • \(a_1=1\),那么 \(B_L=1\)

右侧同理。

\(vL,vR\) 表示左右端点是否不是全零段。

也就是答案是 \(3c-1+[vL] (1+[a_1=0])+[vR] (1+[a_n=0])\)

ARC202

20250911

ARC202 A

一种做法是贪心选择“谷”向两侧合并。用链表维护。

写起来比较麻烦。考虑这个东西可以这样维护:加入右侧一个位置,考虑左侧会怎么合并。

如果让左侧形成了一个“谷”,那么需要把左侧合并到某一边。考虑单调栈维护递减序列,然后考虑左侧(栈顶 \(p\))和其左侧(次栈顶 \(t\))和右侧(当前位置 \(v\))的大小关系。

如果 \(t\leq v\),那么把 \(p\) 合并到 \(t\)。注意是 \(\leq\),因为我们要贪心地合并。

否则 \(p\) 合并到 \(v\)

相应的修改 \(t,v\)。复杂度 \(O(n)\)

ARC202 B

把竖直方向一次跳两步看做跳一步,答案不变。考虑对于 \(m\bmod 2=1\) 的情况,注意到如果我们确定了前 \(n\) 步,那么对于每一行,转移已经确定。

所以此时,我们枚举前 \(n\) 步有多少个向右走的,然后简单组合数。

对于 \(m\bmod 2=0\) 的情况,注意到如果我们确定了前 \(2n\) 步,那么对于每一行,转移已经确定。

同理枚举。

ARC202 C

\(\displaystyle R_x=\frac{10^x-1}{9}\),则有性质 \(\gcd(R_x,R_y)=R_{\gcd(x,y)}\)

于是我们要求的就是 \(\text{lcm}(a_1,\cdots a_m)\)

\(\gcd-\text{lcm}\) 容斥:\(\text{lcm }S=\prod_{T\subseteq S\neq\varnothing}(\gcd T)^{(-1)^{|T|-1}}\)

于是我们每次加入一个 \(v\),我们需要求出 \(\prod_{v\in T}(\gcd T)^{(-1)^{|T|-1}}\)

这可以通过记录 \(c_i\) 表示 \(\gcd T=i\)\(T\) 的个数进行递推。

那么我们要求出 \(\Delta c_k,k|v\)。考虑求出 \(d_k=\sum_{k|i}c_i\),然后 \(\Delta c_k\) 可以递推求出。

那么我们在更新 \(c_k\gets c_k+\Delta c_k\) 时,顺便更新 \(d_i\gets d_i+\Delta c_k,i|k\)

复杂度 \(O(n\log^2 n)\)

ARC202 D

考虑两维分开。

枚举两维不移动的次数 \(x,y\),那么方案数 \(\binom{t}{x}\binom{t-x}{y}X(x)Y(y)\)

考虑 \(X(x)\) 表示移动 \(t-x\) 次,不越过 \(1,n\) 的方案数。

这是经典的双线反射容斥,可以 \(O(\frac{t}{n})\) 解决单次。

然后做一个卷积得到 \(\displaystyle A_i=\sum_{x=0}^i\dfrac{X(x)}{x!}\dfrac{Y(i-x)}{(i-x)!}\)。答案就是 \(t!\sum_i A_i(t-i)!\)

然后这个复杂度是 \(O(\frac{t^2}{n})\),所以当 \(n\leq \sqrt t\) 的时候要拼一个 \(O(tn)\) 的暴力 dp。

所以平衡一下,复杂度是 \(O(n^{1.5})\)

ARC201

ARC201 A

首先分类讨论。

  • \(b\geq a+c\),那么一定都能选上。
  • \(b<a+c\),那么先假设 \(a\) 能选多少选多少,可以选择 \(d=\min(a,b)\) 个,然后 \(c\) 可以选 \(d2=\min(b-d,c)\) 个。然后有 \(\min(d,c-d2)\) 个可以从 \(a\to c\)

然后得出这么选当前有 \(sa\)\(a\)\(sc\)\(c\)。然后根据 \(\sum \min(d,c-d2)\) 分类讨论。

ARC201 B

考虑从大到小不好考虑,所以从低位到高位这样没有后效性。

然后如果当前位 \(d\)\(1\),那么需要选择一个。在枚举更大的一位 \(d+1\) 的时候,需要把大小为 \(2^d\) 的贪心合并为 \(2^{d+1}\)

~ ARC201 C
~ ARC201 D
ARC201 E $^?$

考虑拆贡献。

然后有贡献 \((r-l)(d-u)\),那么拆成 \(rd-ru-ld+lu\)

然后这些个东西随便线段树维护一下。

ARC200

~ ARC200 A
~ ARC200 B
~ ARC200 C
~ ARC200 D
~ ARC200 E

ARC199

~ ARC199 A
~ ARC199 B
~ ARC199 C

ARC198

A 略。

~ ARC198 B
~ ARC198 C

AGC001

20250910

A,B,C 略。

~ AGC001 D
~ AGC001 E
~ AGC001 F

AGC002

20250912

A,B,C 略。

~ AGC002 D
~ AGC002 E
~ AGC002 F

AGC003

20250918~20250919

A,B,C 略。

~ AGC003 D
~ AGC003 E
~ AGC003 F

AGC004

20250928~20250930

A,B,C 略。

AGC004 D

有点坑。

需要注意到的是,如果 \(a_1\neq 1\),那么 \(1\)\(a_1\)\(k\) 步一定有一个 \(\neq 1\)

所以 \(a_1=1\)。然后对于其他的,贪心做。

具体地,dfs 回溯的时候,如果子树深度 \(=k-1\),那么把 \(a\) 变为 \(1\),并且丢弃该子树。

~ AGC004 E $^?$
~ AGC004 F $^?$

AGC005

20250930~20251002

A,B,C 略。

* AGC005 D

直接计数不好做。考虑容斥。

考虑按照 \(\bmod 2k\) 分组。对于组内的元素,枚举有多少个 \(a_i=i\pm k\),这样的方案数是可以直接组合数计算的。

然后背包一下做完了。


注意到复杂度瓶颈在于背包。。所以可以上 NTT 加速。

AGC005 E $^?$

好难的题。

设红方是抓捕的一方,蓝方反之。

注意到无解,当且仅当蓝方可以跑到一条蓝边,使得边的端点在红树上距离 \(\geq 3\)

所以先不妨假设蓝边在红树上距离 \(\leq 2\)。我们注意到一个重要性质是,此时蓝方跑不出红方的子树。

于是问题变成,这样的情况下蓝方最多走几步。这是简单的。

然后判断无解就是看是否存在一条路径使得终点是满足要求的蓝边,同时路径上红方都无法先于蓝方到达。

AGC005 F

考虑拆贡献,那么我们只关心一条边的贡献。

一条边的贡献就是两侧都有被选中的点的方案数 \(\binom{n}{k}-\binom{sz}{k}-\binom{n-sz}{k}\)

然后可以简单得到平方暴力。随便卷积优化一下。

AGC006

20251006~20251009

A,B 略。

AGC006 C

首先,根据期望的线性性,同时我们的操作只有加减,所以我们只要对期望做对称即可。

也就是 \(E(a_i)=E(a_{i-1})+E(a_{i+1})-2E(a_i)\)

然后看到这个式子,就应该意识到,做差分,那么意味着交换了 \(E(a_i)-E(a_i-1)\)\(E(a_{i+1})-E(a_i)\) 这两个差分。

然后一切都简单了。使用倍增维护这个交换的操作的结果。

* AGC006 D

注意到答案具有可二分性。假设二分答案 \(x\),那么把 \(\leq x\) 的置为 \(1\)\(>x\) 的为 \(0\),那么如果最上面的是 \(1\),则答案 \(\leq x\)

对于只有 \(0,1\) 的情况,是好做的。只要找到中心两侧最近的 \(a_i=a_{i+1}\) 的位置即可。

AGC006 E

注意到列之间是独立的,所以我们可以看做是一个序列 \(a\),每次选择 \(i\),交换 \(a_{i-1},a_{i+1}\),并且让 \(a_{i-1},a_i,a_{i+1}\) 取反。问是否可以变为 \(1\cdots n\)

这里 \(a_i=kj(k\in\{-1,1\},j\in[1,n])\) 表示 \(i\) 列包含了 \(3j-2,3j-1,3j\),如果 \(k=-1\),则被翻转了。

例如 \(a=1\) 表示从上到下 \(1,2,3\)\(a=-2\) 表示从上到下 \(6,5,4\)

然后我们发现,如果操作 \(i\),那么会让 \(a_j(j\equiv i\pmod 2)\) 的负号个数的奇偶性变化,并且会让 \(a_j(j\not\equiv i\pmod 2)\) 构成的序列的逆序对数奇偶性变化。

于是我们可以得出合法的必要条件是,两个序列 \(b,c\) 的逆序对数的奇偶性和 \(c,b\) 的负号个数的奇偶性相同。

然后打表发现这个条件是充要的。做完了。


构造证明:先通过操作把 \(c\) 序列的负号去掉,然后通过:

操作 \(([i-2,i],[i,i+2])\times 3\) 这六次,可以把 \(i-1,i+1\) 这两列取反。

这样不改变负号奇偶性,同时显然可以把任意偶数个负号全部去掉。

AGC006 F $^?$

观察到,\((x,y)(y,z)\to(z,x)\),形成了一个三元环。

看到关键是 \(k\) 元环(或者边相关的限制),这样可以考虑给图 \(k\) 染色。

然后观察可得:

  • 如果一个弱连通块里面无法三染色,那么弱连通块会成为完全图。
  • 如果弱连通块存在三种颜色,并且成功染色,那么最后每种颜色之间都是满连接的。
  • 否则不变。

AGC007

20251007~

A,B 略。

AGC007 C $^?$

很难吧。。

观察到:这个操作是对称的,所以对称的边的期望是相同的。

于是对称的边的权值可以平均一下。这样我们发现所有边的权值都是一样的了。

然后考虑一次操作的影响。

称从左到右第 \(i\) 条边为第 \(i\) 条边。

我们考虑第一次操作:

对于第 \(i\) 条边,若当前长度为 \(d\),有 \(\frac{1}{2n}\) 的概率使操作后的第 \(i\) 条边的长度变为 \(3d\)

观察一下,这样第 \(i\) 条边的期望长度是 \(\frac{3d}{2n}+\frac{(n-1)d}{2n}=\frac{n+1}{n}d\)

于是做完了。。因为这样每条边只是乘了一个 \(\frac{n+1}{n}\),仍然保持等差数列的性质。

于是模拟 \(n\) 次操作,每次把期望乘上 \(\frac{n+1}{n}\),答案加上期望即可。

AGC007 D

注意到肯定是分成一些 \([l_i,r_i]\) 段。然后路线形如 \(l_1\to r_1\to l_1\to r_2\to l_2\to \cdots\to l_{m-1}\to r_m\to l_m\to E\)

然后有转移 \(f_i=\max_j f_j+a_i-a_j+\max(2(a_i-a_{j+1}),T)\)

因为 \(\sum a_i-a_j=E\),所以留到最后加上。

然后 \(f_i=\max_j f_j+\max(2(a_i-a_{j+1}),T)\)

然后显然 \(j\) 分成两段转移,前面是 \(2(a_i-a_{j+1})\),后面是 \(T\)

双指针维护。复杂度线性。

AGC007 E

先无脑二分。

考虑直接 dp,有 \(f(x,i)=j\) 表示 \(x\) 到子树内第一个叶子的距离为 \(i\) 的时候,从最后一个叶子到 \(x\) 最短距离是 \(j\)

然后考虑转移。设 \(x\) 的两个儿子的 dp 是 \(g=f(ls),h=f(rs),vl=a_{ls},vr=a_{rs}\)

那么有转移 \(f(x+vl)\gets h(g(x)+vl+vr)+vr\quad(g(x)+vl+vr\leq lim)\)

\(g,h\) 交换类似。

然后我们发现,对于叶子,有效的 dp 值只有 \(f(x,0)=0\),然后每次向父亲转移,只会转移 \(|g|+|h|\) 的大小。看起来复杂度不对。

但是注意到,如果 \(|g|>|h|\),那么一定有多个 \(g\) 对应到同一个有效的 \(h\),这样有很多不同的 \(f(x+vl)\) 的值都是一样的。我们只要保存最小的就好了。

注意到二分值域是 \(O(V\log n)\)

于是复杂度是 \(O(n\log n\log V\log\log n)\)

AGC007 F

还挺好想。

考虑贪心。显然是 \(s\) 上的字符顺序不变的映射到 \(t\) 的一段(可以为空)上。

于是我们维护 \(s\) 每个映射到非空段的字符的包线。也就是贪心地走,每行最右可以走到哪里。

记第 \(i\) 行为 \(pos_i\),那么加入一个新字符,我们发现 \(pos_i\gets pos_{i-1}-1\)

以及如果操作前,\(pos_{lst}\leq r\),那么就应该新增一段。

这样暴力是 \(O(n^2)\) 的。然后全局操作 shift,decrease 可以打 tag。于是是优化到线性。


或者注意到我们只要维护和之前不一样的 pos,于是我们不断弹出 pos 的尾部。同时只可能在首部插入新的 pos。于是只要维护 dec 的 tag。比较好写。

AGC008

20251009~20251012

A,B,C,D 略。

AGC008 E $^?$

考虑 \(i\)\(a_i\) 连边。图形成一个基环树森林。

我们考虑从 \(p\) 倒推 \(a\)

先考虑如果连通块是一个环,分奇偶讨论:

首先都可以有 \(p_i=a_i\)

  • 奇环,那么若 \(p_{p_i}=a_i\),则 \(a_i\) 是和 \(p_i\) 置换环大小相同的一个奇环。
  • 偶环,那么若 \(p_{p_i}=a_i\),则 \(a_i\) 是两个大小相同的,是 \(p_i\) 置换环一半的两个环。这里可能要稍微组合数一下。

然后是不是环的基环树:

考虑一个 \(p\) 的置换环,我们发现如果 \(p\) 有的是 \(p_{p_i}=a_i\),有的是 \(p_i=a_i\),我们发现 \(a\) 是一个内向基环树,并且环上子树都是链。

于是考虑这样的基环树怎么构造出 \(p\)。我们发现奇环树的一条链,对于链上第一个点是 \(a_i=p_i\) 还是 \(a_i=p_{p_i}\),可以有两种填法,而链上后面的点只能是 \(a_i=p_{p_i}\)

当然也可能这条链比较长,第一个点只能是 \(a_i=p_i\)。或者更长的情况就无解。

然后乘起来就好了。

AGC008 F

有意思题。

假设都是关键点。考虑把一种染色情况唯一表示为 \((x,d)\)

我们考虑定了一个根,对于父亲的 \((f,d)\),如果 \(d\) 比某个儿子 \(x\)\(dep_x\) 大,也就是完全覆盖了 \(x\) 的子树,那么也可以表示为 \((x,d+1)\)

为了唯一表示,我们不妨优先表示为更靠叶子的点的组合。

所以要求 \((f,d)\)\(d\) 要比 \(\min_{i\in son(f)}dep_i\) 小。

这是好算的。但是有个问题。对于一个点,可能还没填满子树,先把子树外的全填满了。这当然也会算重。怎么办。

考虑以直径中点为根即可。

如果有不是关键点的,类似讨论。


同样结论的,还有:

把一个染色情况,作为 \(d\) 最小的对的贡献。

\(f_i,g_i\) 为以 \(i\) 为根的最深子树,次深子树,则答案为 \(\sum \min(f_i-1,g_i+1)+1\)

如果有不是关键点的,那么还存在一个下界。也是稍微推一下。

AGC009

20251013~20251015

A,B 略。

~ AGC009 C
~ AGC009 D
~ AGC009 E

很麻烦的构造。

AGC010

20251015~20251020

A,B 略。

~ AGC010 C
~ AGC010 D $^?$
~ AGC010 E $^?$

AGC011

20251017~20251022

A,B 略。

~ AGC011 C $^?$
~ AGC011 D
~ AGC011 E $^?$
~ AGC011 F $^?$

AGC012

20251017~20251022

A,B 略。

AGC012 C

刚做完 agc074c。考虑归纳构造的思路。

首先一个重要的观察是:对于序列 1 2 ... n 1 2 ... n,贡献是 \(2^n\)

观察发现,一个贡献一定是形如 \(AA\),其中 \(A\)1 2 ... n 的子序列。

进一步的,固定后缀是 1 2 ... n,在后缀的前方加入 \(n\),可以把问题递归到 \(\frac{N-1}{2}\),加入 \(1\),则可以把问题递归到 \(N-1\)

所以需要用到的数只有 \(O(\log A)\) 个。

AGC012 D

显然不同颜色之间交换,只有按重量排序后的一段前缀可以交换。并且这些点可交换关系是团。

构造就是让全局重量最小的球做工具进行交换。

要注意的就是,\((c,w)\) 可以和其他颜色交换,要么满足 \(w+mnw_c\leq X\)要么满足 \(w+\min_{i\neq c} mnw_i\leq Y\)。否则无法交换。

AGC012 E $^?$

首先一个显然的 dp 是,\(f(i,S)\) 表示 dp 到 \(a_i\),使用了 \(S\) 中的,是否可行。然后不会了。

首先套路的,因为 \(f\) 表示的是可行性,考虑找到某一维的单调性,变成最优化以减少一维。

我们发现,把 \(i\) 这一维去掉,变成 \(f(S)\) 可以到达的最大 \(i\)!!怎么我没有想到??

然后闭着眼睛做。

AGC012 F $^!$

好牛啊啊啊。不会就是不会。

假设 \(a\) 不同。首先倒着考虑。

然后观察性质,发现如果后面有 \(a_i,a_{i-1}\) 这一段,那么对于 \(j<i-1,a_j\leq \min(a_i,a_{i-1})\)\(a_j\geq \max(a_i,a_{i-1})\)。也就是路径不会再走进之前跳过的区间内。

这种优秀的结构,启发我们这样设计 dp:令 \(f(i,l,r)\) 表示 dp 到 \(i\),左右两侧有 \(l,r\) 个位置可以走的方案数。

dp 状态显然是不重的。然后最重要的是:我们发现,对于第 \(i\) 个位置,其可达区间是 \([i+1,2n-i-1]\)。同时,对于任意一个 \(f(i,l,r)\)只要 \(l\neq 0(r\neq 0)\) 一定可以构造出下一步到达可达区间端点的方案。

不知道这一步到底是怎么想到的。。

也就是,转移是 \(f(i,l,r)\to f(i-1,l+1+1,0\leq c<r+1+1)\)

\(l\) 同理。然后还有 \(f(i,l,r)\to f(i-1,l+1,r+1)\) 表示各删去左右两侧的一个位置。

直接做。

AGC074

20251026~20251027

D,E 太难不做。

AGC074 A

绕了一个大弯。

考虑最简单的一个策略。我们找到一条路径上不填,其他都填。

然后是有问题的。再做思考,发现只要多条路径的 \(p\) 区间不交就可以选。

于是直接 dp 即可。

所以十几二十分钟就做出来的是怎么想到的。?

AGC074 B

真的比 A 简单吧。。。。

首先不妨直接猜测每次操作只会移动 \(1\)\(1\)

在这个前提下,一次操作本质上就是把两个 \(1\) 方向相反的移动相同距离。

然后发现可以直接找到策略:我们把 \(a,b\)\(1\) 按照顺序匹配,然后找到方向相反,且不跨越其他 \(1\) 的一对匹配,直接操作。

显然存在这样一对匹配。每次操作至少会让一个 \(1\) 正位。

所以对于 \(cnt_1\leq \lfloor\frac{n}{2}\rfloor\) 的情况,可以操作。否则对 \(0\) 这样操作(也就是 \(01\) 翻转)。

AGC074 C $^?$

先假设 \(N=2^n\)

首先是构造 \(P\) 的思路,是比较常见的:\(P_0=0,P_i=i-1+2^{10+\text{lg}(i-1)}\)。其思想就是可以通过 ban 掉高位来提取 LIS。

但是就是不会构造 \(A\)。。

考虑 归纳构造 :我们通过 ban 掉每个集合的某个元素,递归到子问题。在这个问题里,就是通过 ban 相邻两个位置最低位不同的那个 \(1\) 实现的。

考虑这种情况下,如果要求的 \(|LIS|>2^{n-1}\),那么可以找到 \(a=(|LIS|-2^{n-1}-1)2^{10}\)

否则通过 ban 最低位,可以让 \(P(2k+1),P(2k+2)\) 两个数变得相等。

注意还要 ban \(2^{10}\),让 \(P(1)=P(2)\)

然后是 \(N\neq 2^n\)

考虑如果让第一次归纳之后的情况仍然相同,就比较好构造。

所以我们从后向前删除 \(P(2k+1)\) 这些元素。直到 \(|P|=N\)

\(A\) 的构造特判第一次就 \(|LIS|>2^{n-1}\) 的情况。


方法 \(2\) 其实也是归纳构造。

考虑已知 \(N=1,N=2\)

\(2^x>\max P,\max A\)

然后考虑 \(N\to N+1\),就是 \(P'\gets P+2^x,A'\gets (2^{x+1}-1)+A\)

这样显然不够。我们需要快速扩展。

于是 \(N\to 2N+1\) 的构造来了。

我们让 \(P'\gets P+(P\text{ or }2^x)+2^{x+1},A'\gets (2^{x+2}-1)+(A(1)+2^{x+1})+A(1)+\cdots +(A(n)+2^{x+1})+A(n)\)

我只能说很牛。。

posted @ 2025-09-09 23:03  adam01  阅读(106)  评论(0)    收藏  举报