Atcoder 题目选做(三)

news/2024/11/17 21:31:43/文章来源:https://www.cnblogs.com/DaiRuiChen007/p/18199971

\(\text{By DaiRuiChen007}\)




1. [ARC152E] Xor Annihilation

Problem Link

\(2^n-1\) 个动点,权值为 \(1\sim 2^n-1\) 的排列,对于每个点,设其左右两边所有点权异或和分别为 \(L,R\),那么他会向较大 \(L/R\) 较大的一边移动,如果 \(L=R\) 则静止不动。

所有点运动速度一定,如果两个点相遇那么他们会合成一个新点,权值为他们的异或和。

在左右无穷点处放两个权值为 \(x\) 的静点(\(x\in[0,2^n)\))求有多少 \(x\) 使得最终所有点都静止。

数据范围:\(n\le 18\)

注意到权值异或总和为 \(0\),因此设前缀异或和为 \(s_i\),那么 \(i\) 左边和右边的点权异或和就是 \(s_{i-1}\)\(s_i\)

那么如果两个点 \(i,i+1\) 合成之后相当于删掉 \(s_i\),这要求 \(s_i\ge s_{i-1}\)\(s_i\ge s_{i+1}\) 且三个数不全相等。

那么整个排列会不断操作直到所有 \(s\) 相等或呈单谷。

如果 \(s\) 单谷那么说明谷低左侧的点向左无限运动,必然不合法。

因此我们要使得最终所有 \(s\) 相等,显然这个相等的值就是 \(\min_{i=1}^n s_i\),那么这些点能静止当且仅当 \(s_{\min}\ge x\)

因此我们要计数有多少 \(x\) 使得所有 \(s_i\oplus x\ge x\),这只要 \(s_i\) 最高位不属于 \(x\) 即可。

求出所有 \(s_i\) 最高位的并,剩下的位可以随便选。

时间复杂度 \(\mathcal O(2^n)\)

Submission Link




2. [ARC152F] Attraction on Tree

Problem Link

给定一个 \(n\) 个点的树,一个动点 \(x\) 初始在 \(1\),找到一个排列 \(p_1\sim p_n\),使得第 \(i\) 步满足 \(x\ne p_i\) 然后让 \(x\)\(p_i\) 方向移动一条边,最终 \(x=n\),最小化过程中 \(x\) 经过的点数。

数据范围:\(n\le 2\times 10^5\)

显然最终经过了 \(2k+\mathrm{dis}(1,n)\) 条边,因此 \(n\not\equiv\mathrm{dis}(1,n)\pmod 2\) 就不合法。

先考虑最小值,即只经过 \(\mathrm{path}(1,n)\) 的方案。

那么对于路径上第 \(i\) 个点 \(c_i\),设他在路径外的子树大小为 \(\mathrm{siz}(c_i)\)

我们发现很多操作都要在折返中抵消,那么我们只要钦定链上哪些操作最终有用,剩下的操作形成若干跨子树的匹配,那么我们一定能构造一个合法的 \(p\)

根据经典结论,那么我们要求剩下的操作中不存在绝对众数。

找到最大的 \(\mathrm{siz}(c_i)\),那么我们至多在他的子树里钦定 \(i\) 个没被抵消。

因此这种情况的充要条件就是 \(\mathrm{siz}(c_i)-i\le\dfrac{n-\mathrm{dis}(1,n)}2\),显然这样的 \(i\) 至多一个,因此我们能构造出一个合法的匹配。

否则找到不合法的这棵子树,枚举一个连通块 \(S\),记每个连通块内节点 \(u\) 在连通块外的子树大小为 \(\mathrm{siz}(u)\)

那么我们依然要求 \(\mathrm{siz}(u)-i\le\dfrac{n-\mathrm{dis}(1,n)}2\),证明大致同上。

那么我们要在这个基础上保留尽可能少的节点是的所有 \(\mathrm{siz}(u)\) 不超过 \(k=\dfrac{n-\mathrm{dis}(1,n)}2+i\)

注意到 \(\mathrm{siz}(c_i)\le n-\mathrm{dis}(1,n)\le 2k\),因此不合法的所有点构成一条链,对于每个点贪心地割掉若干个最大的子树即可。

时间复杂度 \(\mathcal O(n)\)

Submission Link




3. [ABC273G] Row Column Sums 2

Problem Link

求有多少个 \(n\times n\) 正整数矩阵使得其第 \(i\) 行和是 \(r_i\),第 \(j\) 列和是 \(c_j\)

数据范围:\(n\le 5000,r_i,c_j\le 2\)

显然 \(\sum r_i\ne\sum c_j\) 无解,不妨记 \(m=\sum r_i=\sum c_j\)

否则我们可以看成二分图,\(r_i=0\) 不建点,\(r_i=2\) 拆成两个点,右部 \(c_j\) 同理,两个点 \((i,j)\) 匹配表示 \(A_{i,j}\)\(+1\)

但是对于 \(r_i=2,c_j=1,c_k=1\) 此时 \(i_0\to j,i_1\to k\)\(i_0\to k,i_1\to j\) 是同一种方案,因此假设 \(r_i,c_j\) 中分别有 \(x,y\)\(2\),那么答案要除以 \(2^{x+y}\)

但这并不完全对,假如 \(r_i=2,c_j=2\),且 \((i_0,i_1)\to(j_0,j_1)\),此时只是重复计算了两倍贡献但除以了 \(4\),因此对于这样的匹配要乘回一个 \(2\)

因此我们枚举 \(i\) 表示有多少这样的 \(r_p=c_q=2\) 且互相匹配,对答案的贡献就是对应匹配数 \(\times 2^i\),那么我们要求剩余部分没有这样的匹配,可以容斥原理解决:

\[\mathrm{Ans}=\dfrac{1}{2^{x+y}}\sum_{i=0}^{\min(x,y)} 2^i\binom xi\binom yii!2^i\sum_{j=0}^{\min(x,y)-i}\binom{x-i}j\binom{y-i}jj!2^j(m-2i-2j)! \]

其中乘第二个 \(2^i\) 是这 \(i\)\((p_0,p_1),(q_0,q_1)\) 中每对有两种匹配方式。

时间复杂度 \(\mathcal O(n^2)\)

Submission Link




4. [ABC273Ex] Inv(0,1)ving Insert(1,0)n

Problem Link

给定 \(n\) 个分数 \(\dfrac{a_i}{b_i}\),记 \(f_{l,r}\) 表示 \(\dfrac{a_l}{b_l}\sim \dfrac{a_r}{b_r}\) 在 Stern-Brocot Tree 上的虚树大小,求 \(\sum_{1\le l\le r\le n}f_{l,r}\)

数据范围:\(n\le 10^{5},a_i,b_i\le 10^9\)

先考虑如何求 \(l=r\) 的情况,显然一个分数的深度可以很大,但是根据经典结论,这条路径上转向点至多 \(\mathcal O(\log V)\) 个。

因此对于当前树上区间 \((\dfrac{a_L}{b_L},\dfrac{a_R}{b_R})\),我们可以求出最大的 \(k\) 使得 \(\dfrac{a_i}{b_i}<\dfrac{ka_L+a_R}{kb_L+b_R}\)\(\dfrac{a_i}{b_i}>\dfrac{a_L+ka_R}{b_L+kb_R}\),这是容易的。

那么对于这个问题,首先如果 \(\gcd(a_i,b_i)\ne 1\),那么该分数无法表示,因此 \(f_{l,r}>0\) 的区间不会包含这些点,那么我们可以把原序列分成若干段,每段分别解决。

我们可以对所有分数建虚树,对于虚树上的一条链,贡献次数只和链底子树内包含的分数下标集 \(X\) 有关,只要 \([l,r]\cap X\ne\varnothing\) 那么这条链上每个节点都对 \(f_{l,r}\)\(+1\) 贡献,可以用启发式合并动态维护这些下标。

然后递归,维护一个分数集合 \(S\),如果 \(S\) 中所有元素都在 \(mid=\dfrac{a_L+a_R}{b_L+b_R}\) 的同一侧,那么根据刚才的做法求出 \(k\) 后直接转成子问题,否则二分出 \(S\)\(<mid\)\(>mid\) 的两个子集分别递归,然后在当前节点上启发式合并维护当前节点权值。

时间复杂度 \(\mathcal O(n\log V\log n)\)

Submission Link




*5. [AGC058D] Yet Another ABC String

Problem Link

求有多少 \(a\)\(\texttt A\)\(b\)\(\texttt B\)\(c\)\(\texttt C\) 构成的字符串使得不存在子串 \(\texttt{ABC},\texttt{BCA},\texttt{CAB}\)

数据范围:\(a,b,c\le 10^6\)

\(n=a+b+c\)

考虑容斥,钦定若干个 \(i\) 使得 \(s[i,i+2]\) 不合法,但是此时可能会同时钦定到 \(i,i+1\) 从而导致两个不合法段拼起来了。

因此我们不妨枚举极长的被钦定不合法的段,先求容斥系数,设 \(p_i\) 表示段长为 \(i\) 时的容斥系数,那么考虑上一个被钦定的位置有 \(p_i=-p_{i-1}-p_{i-2}\)

边界条件是 \(p_2=0,p_3=-1\),从而得到 \(p_{3k}=-1,p_{3k+1}=1,p_{3k+2}=0\)\(k>0\))。

枚举每一段的长度,会发现此时的序列形如:若干个被钦定的 \(\texttt{ABC}\) 循环串和一些没限制的字符。

  • 长度为 \(3k\) 的串相当于 \(k\)\(\texttt{ABC}\),但有 \(3\) 种方法选颜色。
  • 长度为 \(3k+1\) 的串相当于 \(k\)\(\texttt{ABC}\) 和一个自由字符。
  • 自由字符可以看成 \(k=0\) 的长度为 \(3k+1\) 的串。

因此设 \(f_{i,j}\) 表示当前字符串长度为 \(i\),钦定 \(j\)\(\texttt{ABC}\) 循环串的容斥系数,有转移:

\[f_{i,j}=\sum_{k\ge 0} f_{i-3k-1,j-1}-3\sum_{k\ge 1}f_{i-3k,j} \]

答案为 \(\sum \binom{n-3i}{a-i,b-i,c-i}f_{n,n-3i}\)

考虑如何求 \(f\),用二元生成函数,设 \(F(x,y)=\sum f_{i,j}x^iy^j\),转移系数为 \(G(x,y)\),那么 \(F(x,y)=\sum_{k\ge 0} G^k=\dfrac{1}{1-G}\)

其中 \(G(x,y)=\sum_{k\ge 0}x^{3k+1}y-3\sum_{k\ge 1} x^{3k}=\dfrac{xy-3x^3}{1-x^3}\),因此 \(F(x,y)=\dfrac{1-x^3}{1-xy+2x^3}\)

我们只要求 \([x^uy^v]\dfrac{1}{1-xy+2x^3}\) 即可,即 \([x^uy^v]\sum_{i\ge 0}(xy-2x^3)^i\),那么最终对答案有贡献的项就是 \((xy)^v(-2x^3)^{(u-v)/3}\),直接计算二项式系数即可 \(\mathcal O(1)\) 计算。

最终答案需要 \(\mathcal O(n)\) 项系数,预处理组合数后直接计算即可。

时间复杂度 \(\mathcal O(n)\)

Submission Link




6. [AGC058E] Nearer Permutation

Problem Link

对于两个长度为 \(n\) 的排列 \(p,q\),定义它们的距离 \(d(p,q)\) 为:

  • 每次交换 \(p\) 中相邻两个元素,使得 \(p=q\) 的最小操作次数。

定义单位排列 \(I=(1,2,\cdots,n)\),定义 \(f(x)\) 为字典序最小的排列 \(z\) 满足 \(d(x,z)\le d(I,z)\)。例如当 \(n=3,x=(2,3,1)\)\(f(x)=(2,1,3)\)

给定排列 \(q\),判断是否存在排列 \(p\) 满足 \(f(p)=q\)

数据范围:\(n\le 3\times 10^5\)

以下过程排列下标均为均为 \(0\sim n-1\)

先考虑一种求 \(f(p)\) 的算法:从 \(f(p)=p\) 出发,每次尝试令字典序最小进行贪心调整:

  • \(s=\mathrm{inv}(p)/2\)
  • 进行如下操作 \(n\) 次:求出 \(\min\{p_0,p_1,\dots,p_s\}=p_k\),把 \(p_k\) 插入答案序列 \(q\) 的末尾并删除,然后令 \(s\gets s-k\)

这个过程相当于贪心,每次这样的操作肯定会选取一个前缀最小值,而移动该前缀最小值对 \(d(p,q)-d(I,q)\)\(-2k\) 的贡献,因此 \(k\) 的上界就是 \(\mathrm{inv}(p)/2\)

观察 \(q\) 序列,如果存在某个位置使得 \(q_k>q_{k+1}\)(没有说明 \(q=I\),显然 \(f(I)=I\))。

那么说明 \(q_{k+1}\)\(p\) 排列中一定是等到 \(q_k\) 删掉后才进入可能被选范围内。

考虑删除 \(q_k\) 前的 \(p\) 序列,此时 \(p_{s+1}=q_{k+1}\)\(p_0=q_k\),并且插入 \(q_{k+1}\)\(s=0\),因此 \(q_{k+2}\sim q_n\) 与剩余的 \(p\) 序列一致。

我们只需调整 \(p_0\sim p_{k-1}\) 使得操作 \(k\) 次后 \(p\) 满足如上性质即可。

先令 \(q=p\),然后依次考虑 \(q_{k+1},q_{k-1},q_{k-2},\dots,q_0\),每次把当前元素 \(q_i\) 向后移动 \(c\) 位满足 \(q_{i}\le q_{i+1}\sim q_{i+c}\),若 \(i=k+1\) 则需满足 \(q_k\le q_{i+1}\sim q_{i+c}\)

我们希望删除 \(q_{k+1}\) 前其在 \(p\) 中的位置 \(x\) 与当前的 \(s\)\(s-x=y\) 尽可能小。

那么把 \(q_i\) 向后移动会使得原序列逆序对数 \(+1\),删除时花费代价 \(+1\),最终使得 \(y\) 减小 \(0.5\)

因此我们要让 \(\sum c_i=\mathrm{inv}(q)/\mathrm{inv}(q)-1\),贪心让每次 \(c_i\) 尽可能取最大即可。

时间复杂度 \(\mathcal O(n\log n)\)

Submission Link




*7. [AGC058F] Authentic Tree DP

Problem Link

对于一棵 \(n\) 个点的树 \(T\),定义 \(f(T)\) 为:

  • \(n=1\)\(f(T)=1\)
  • 否则对于所有 \(e\in T\),设 \(T_{e,1},T_{e,2}\) 为切掉这条边形成的两棵子树,那么 \(f(T)=\dfrac 1n\sum_e f(T_{e,1})\times f(T_{e,2})\)

给定 \(T\),求 \(f(T)\bmod P\) 的值。

数据范围:\(n\le 5000\)

看到这个模型,考虑编一个组合意义:在每条边中间插一个点,那么 \(f(T)\) 就是随机排列每个点的标号,使得新加入的点标号都大于其邻居的方案数。

那么 \(f(T)\) 的定义相当于枚举最大值所在的位置,但是我们会发现此时的分母为 \(\dfrac 1{2n-1}\),我们需要调整,不妨给加入的每个点下面挂 \(P-1\) 个点,那么在模意义下分母为 \(\dfrac 1n\)

然后我们可以考虑容斥,把边大于其父亲的限制容斥,那么所有的限制都形如儿子小于父亲,所有事件都独立,只要维护每个点为根的连通块大小即可。

转移时类似树形背包,动态枚举每条边断不断即可。

时间复杂度 \(\mathcal O(n^2)\)

Submission Link




8. [ARC153E] Deque Minimization

Problem Link

给定十进制串 \(X\),记 \(f(X)\) 表示按如下方式能得到的最小十进制串 \(Y\)

  • 从高到低考虑 \(X\) 的每一位,分别加入 \(Y\) 的首部或尾部。

给定 \(Y\),求有多少 \(X\) 使得 \(f(X)=Y\)

数据范围:\(|Y|\le 2\times 10^5\)

考虑 \(f(X)\) 的计算过程:显然对于当前位,如果小于 \(Y\) 的首位就放到队头,如果大于 \(Y\) 的首尾就放到队尾,如果等于 \(Y\) 的首尾,由于放到队头的若干个数单调不降,因此放到队头也一定更优。

因此我们可以得到一个区间 dp:\(f_{l,r}=f_{l+1,r}\times [Y_l\le Y_{l+1}]+f_{l,r-1}\times[Y_r>Y_l]\)

把整个转移写在网格图上(图源官方题解):

要求的就是从 \((i,i)\to (1,n)\) 的路径数量和,注意到很多位置与 \((1,n)\) 不连通。

首先我们发现,如果 \(Y[1,l]\) 不是单调递增的,那么 \((l,r)\)\((1,n)\) 不连通。

因此我们要考虑的 \(l\) 一定是前缀递增的一个连续段,这些区域有一个很好的性质,就是所有向上走的转移(\(f_{l,r}\to f_{l-1,r}\))始终都是存在的,那么可以考虑倒着维护每一行,即 \(l\) 递减地维护 \(f_{l,*}\)

暴力转移肯定不优,不妨尝试把这段递增前缀中值相同的缩起来,这样我们就只要处理 \(\mathcal O(|\Sigma|)\) 个连续段了。

对于相同的一段 \(Y_{[a,b]}\),观察网格图的形状:左侧是一个只能向上走的阶梯,那么 \(f_{a,a}\sim f_{a,b}=1\)

然后右侧是若干连续向右的矩形转移,直到 \((b,n]\) 中第一个 \(x\) 使得 \(Y_x>Y_b\),那么 \([b,x)\) 这个范围内所有 \(f_{l,r}\to f_{l,r+1}\) 的转移都是存在的。

可以发现 \(f_{[a,b],[x,n]}\) 这个范围内的值无法被某个 \(f_{i,i}\) 转移到,也不需要考虑。

那么我们只要考虑 \(f_{b,[b,x)}\to f_{a,[b,x)}\) 的过程,容易发现这就是进行了 \(k=b-a+1\) 次前缀和操作。

根据插板法可以直接算出多次前缀和的转移系数:\(f_{b,i}\to f_{a,j}\) 的系数为 \(\binom{j-i+k-1}{k-1}\),因此直接卷积一遍就能快处理 \(k\) 阶前缀和。

时间复杂度 \(\mathcal O(|\Sigma|n\log n)\),其中 \(|\Sigma|=9\)

Submission Link




9. [ARC153F] Tri-Colored Paths

Problem Link

给定一张 \(n\) 个点 \(m\) 条边的无向简单连通图,求有多少种给边染色 \(\{1,2,3\}\) 的方法,使得至少存在一条简单路径上有三种颜色。

数据范围:\(n,m\le 2\times 10^5\)

注意到限制比较松,我们可以考虑染了三种颜色但没有这样路径的方案数。

先考虑树的情况,取某条极长路径 \(u\to v\),显然路径上只有两种颜色,不妨假设第三种颜色在树上某个点 \(w\) 子树内。

那么 \(u\to w\) 整个部分不能包括两种颜色,同理 \(w\to v\) 部分也只能有一种颜色。

因此我们还能证明这样的 \(w\) 至多一个。

方案数就是 \(\sum f(deg_u)\),其中 \(f(x)=3^x-2^x+3\)

因此对于一棵树,合法的染色方案一定存在恰好一个节点,使得该节点每个子树内都染相同颜色。

然后考虑一般情况,先缩点,对每个点双联通分量内部讨论:

  • 存在一个长度 \(\ge 4\) 的环,此时整个点双联通分量只能染同一颜色,否则必然存在一条路径从任意一个点出发经过两种颜色,此时这个点往外连第三种颜色即可(手玩可以得出结论)。
  • 否则该点双连通分量中只有三元环,先假设每条边颜色各不相同:
    • 手玩发现如果环上存在两个点 \(u,v\) ,以及环外两点 \(x,y\) 使得 \(x\to u,y\to v\) 存在(\(x\ne y\))那么这个环不能染 \(> 1\) 种颜色。
    • 否则分类讨论:如果 \(u,v,w\) 都只和 \(\le 1\) 个环外点相连,那么此时三元环可以染三种颜色,然后环外边染该点在环上对边的颜色,恰有 \(6\) 种方案,这种情况只在 \(n=4,m\ge 5\) 时出现。
    • 否则这个点双一定恰为三元环,且恰有一个点 \(u\) 向外连边(假设 \(n>3\)),手玩发现三元环必须染三种不同颜色,且环外所有边必须都染 \(u\) 对边颜色,也只有 \(6\) 种方案。

否则所有点双都同色,类似树的结论,可以在圆方树上恰取出一个圆点使得其每个子树染相同颜色。

答案还是 \(\sum f(deg_u)\),但 \(u\) 是圆方树上所有圆点。

时间复杂度 \(\mathcal O(n+m)\)

Submission Link




10. [ARC154E] Reverse and Inversion

Problem Link

给定一个 \(1\sim n\) 的排列 \(p\)\(m\) 次操作,每次随机一对 \(1\le l\le r\le n\) 并翻转 \(p_l\sim p_r\)

对于最终的每个排列 \(q_1\sim q_n\),计算 \(\sum_{i<j} [q_i>q_j](j-i)\)

数据范围:\(n,m\le 2\times 10^5\)

考虑计算每个 \(i\) 对答案贡献的系数,容易发现这就是:

\[\begin{aligned} \sum_{j<i}[q_j>q_i]-\sum_{i<j} [q_i>q_j] &=(i-1)-\sum_{j<i}[q_j<q_i]-\sum_{i<j} [q_i>q_j]\\ &=(i-1)-(q_i-1)=i-q_i \end{aligned} \]

因此答案就是 \(\sum i^2-i\times q_i\),第一部分很好统计,我们只需要对于每个 \(p_i\) 求出其最终所在位置的期望。

可以发现对于每个 \(i\),一次操作后使得 \(i\to j\) 的方案数与使得 \(i\to n-j+1\) 的方案数是相等的。

因此对于每个 \(i\),有 \(\left(1-\dfrac{i(n-i)}{n(n+1)/2}\right)^m\) 的概率留在原地,剩下的情况所在位置的期望是 \(\dfrac{n+1}2\)

那么就可以快速计算每个 \(p_i\) 最终位置的期望。

时间复杂度 \(\mathcal O(n\log P)\)

Submission Link




*11. [ARC154F] Dice Game

Problem Link

给定一个 \([1,n]\) 的随机变量,对于 \(i\in [1,m]\) 求随机出 \(1\sim n\) 每个数至少一次的随机次数的 \(i\) 次方的期望。

数据范围:\(n,m\le 2\times 10^5\)

假设 \(F(z)\) 为对应的 PGF,即 \([z^k]F(z)\) 表示随机恰好 \(k\) 次后得到所有面的概率,那么考察 \(F(e^z)\) 得到:

\[[z^i]F(e^z)=[z^i]\sum_{k=0}^{\infty} f_k\sum_{i=0}^\infty \dfrac{(kz)^i}{i!}=\sum_{k=0}^\infty \dfrac{k^if_k}{i!} \]

因此 \(F(e^z)\) 就是答案的 EGF。

先考虑求 \(F(z)\),从朴素 dp 开始:设 \(f_{i,j}\) 表示随机 \(j\) 次后已经得到 \(i\) 个数的概率,那么:\(f_{i,j}=\dfrac inf_{i,j-1}+\dfrac{n-i+1}n f_{i-1,j-1}\),用 \(F_i(z)\) 表示 \(\sum z^jf_{i,j}\) 得到:

\[F_i(z)=z\left(\dfrac in F_i(z)+\dfrac{n-i+1}n F_{i-1}(z)\right)=\dfrac{z(n-i+1)}{n-iz}F_{i-1}(z)=\dfrac{z^in^{\underline i}}{\prod_{j=1}^i(n-jz)} \]

那么最终的 \(F(z)=\dfrac{z}nF_{n-1}(z)=\dfrac{z^n(n-1)!}{\prod^{n-1}_{i=1}(n-iz)}\),不妨设分母为 \(G(z)\),可以通过分治 NTT 算出。

由于 \(F(z)\) 为无穷级数,并不方便直接带入 \(F(e^z)\),那么我们可以把 \(e^z\) 带入右侧得到 \(F(e^z)=\dfrac{e^{zn}(n-1)!}{G(e^z)}\)

\(G(z)\)\(n-1\) 次多项式,求 \(G(e^z)\bmod {z^{m+1}}\) 可以这样推导:

\[G(e^z)=\sum_{i=0}^{n-1} g_i\sum_{j=0}^m\dfrac{(iz)^j}{j!}=\mathrm{EGF}\sum_{i=0}^{n-1}\dfrac{g_i}{1-iz} \]

其中 \(\mathrm{EGF}\) 算子表示把 \(i\) 次项系数除以 \(i!\)

而这个函数也可以通过分治 NTT 维护通分后的分子分母。

最后多项式求逆除一下得到 \(G(e^z)\),再求逆除一下得到 \(F(e^z)\) 即可。

时间复杂度 \(\mathcal O(n\log^2n+m\log^2m)\)

Submission Link




12. [ARC155D] Avoid Coprime Game

Problem Link

给定 \(a_1\sim a_n\)\(x=0\),A 和 B 轮流选择 \(a_i\) 并令 \(x\gets\gcd(x,a_i)\),不能重复用 \(a_i\),谁把 \(x\) 变成 \(1\) 就输。

对于每个 \(a_i\),求出 A 第一步操作该数后谁会赢。

数据范围:\(n\le2 \times 10^5\)

注意到 \(x\mid a_i\) 比较麻烦,否则如果每次 \(x\) 严格变小,我们可以简单 dp 求胜负态。

\(f_x\) 表示当前胜负状态,那么 \(f_x=\mathrm{OR}\{\overline{f_y}\mid\exists a_i:\gcd(a_i,x)=y\}\),容易证明这一步取的 \(a_i\) 不可能被取过。

判断是否存在 \(a_i\) 是简单的,先求每个 \(x\) 的倍数数量,然后从大到小枚举 \(y\mid x\),把 \(y\) 的因子中 \(a_i\) 作为倍数的数量出现次数减去 \(y\) 的倍数的数量。

但是我们现在可能可以不让 \(x\) 变小,即拖延时间。

我们发现一个人会拖延时间当且仅当 \(f_x=0\),那么两个人会拖延时间直到所有 \(x\) 倍数被选完。

那么我们需要记录 \(x\) 的倍数已经用了几个,进一步发现只关心 \(x\) 倍数被选择个数的奇偶性就行,显然选择 \(x\) 的倍数的数量和操作数量相等。

那么跟上面类似 dp 即可,最后处理拖延时间的情况。

时间复杂度 \(\mathcal O(n\log^2n)\)

Submission Link




*13. [ARC155E] Split and Square

Problem Link

\(S\) 是由 \(n\)\(m\) 位二进制数组成的集合,定义 \(f(S)\) 表示 \(\{i\oplus j\mid i,j\in S\}\)

一次操作可以选定 \(T\subseteq S\),使得 \(S\gets f(T)\cup f(S\setminus T)\),求使得 \(S=\{0\}\) 的最小操作次数。

数据范围:\(n,m\le 300\)

这种问题先考虑 \(S\) 的线性基 \(e_1\sim e_k\),设最终 \(e_1\sim e_s\in T,e_{s+1}\sim e_k\in S\setminus T\)

那么我们知道 \(f(T)\) 包含 \(e_1\oplus e_2\sim e_1\oplus e_s\),并且他们之间线性无关(任取一个子集显然异或和不为 \(0\))。

那么 \(f(T)\) 线性基大小 \(\ge s-1\),同理 \(f(S\setminus T)\) 线性基大小 \(\ge k-s-1\),因此线性基大小每次至多 \(-2\)

然后我们分析每次线性基大小减小的下界,假如我们只想让新的 \(S\) 线性基大小减一,这是简单的,把 \(S\) 里的数唯一表示成 \(e_1\sim e_k\) 的异或和,表示方式中包含 \(e_1\) 的全部放进 \(T\)

那么容易证明 \(f(T)\cup f(S)\) 的张成空间维度 \(\le k-1\)(可以用 \(e_2\sim e_k\) 表示所有数)。

那么这样操作每次线性基大小至少 \(-1\)

再进一步分析:注意到操作一次之后 \(0\in S\),且以后该性质一直成立,不妨假设在操作的时候 \(0,e_1\sim e_k\in T\),那么 \(f(T)\) 依然满足这个条件,那么 \(f(T)\) 的线性基大小 \(\ge k\).

那么第二次操作以及之后每次操作不可能令 \(f(T),f(S\setminus T)\) 的线性基大小同时 \(-1\),因此每一步都只可能令线性基大小 \(-1\)

那么我们只要特殊处理第一次操作,我们又发现令 \(S\) 的每个数异或上 \(S_0\)(某个元素)显然不会影响 \(f(T),f(S\setminus T)\) 的值,那么这样我们就又转化成了 \(0\in S\) 的情况。

因此我们只要求出这个新集合的线性基大小即可,std::bitset 优化一下。

时间复杂度 \(\mathcal O\left(\dfrac{nm^2}\omega\right)\)

Submission Link




14. [ARC156D] Xor Sum 5

Problem Link

\(n\) 个值 \(c_1\sim c_n\) 填入 \(a_1\sim a_k\),可以重复(相等的 \(c\) 算不同元素),求所有 \(\sum_{i=1}^k a_i\) 的异或和。

数据范围:\(n,c_i\le 1000,k\le 10^{12}\)

首先根据 Lucas 定理 \(\binom nm\bmod 2=[m\subseteq n]\),那么假设我们知道 \(c_1\sim c_n\) 的出现次数 \(b_1\sim b_n\)

那么对应的方案数 \(\binom{k}{b_1,\dots,b_n}\) 为奇数当且仅当 \(b_1\sim b_n\) 构成了 \(k\) 在二进制下的一个划分,即 \(\forall i\ne j,b_i\operatorname{AND}b_j=0\)

那么我们只要知道每个 \(k\) 的二进制位被哪个 \(c_i\) 选了即可。

从低到高考虑每一个二进制位 \(d\),可以直接 \(dp_i\) 记录前面的位对当前的进位为 \(i\) 的方案数,如果 \(d\in k\) 则枚举 \(a_i\),加入 \(a_i\times 2^d\)

注意 \(2\mid n\) 时如果 \(d\) 小于 \(k\) 的最高位,这些方案数始终是偶数,不能计算贡献(最高位有 \(n\) 中方案)。

显然进位数不超过 \(2V\),直接 dp 即可。

时间复杂度:\(\mathcal O(nV\log k)\)

Submission Link




*15. [ARC156E] Non-Adjacent Matching

Problem Link

给定 \(n\) 个点 \(1\sim n\),定义一张图是好的需要满足:

  • \((1,2),(2,3),\dots,(n,1)\) 之间没有边。
  • 每个点度数 \(\le m\)
  • 所有点度数和 \(\le k\)

求有多少 \(x_1\sim x_n\) 可以作为一张好图的度数序列。

数据范围:\(n,m\le 3000,k\le nm\)

\(S=\sum_{i=1}^n x_i\),一组序列合法当且仅当:

  • \(2\mid S,S\le k\)
  • \(\forall i\in [1,n]\) 满足 \(x_i+x_{i+1}\le S/2\)
  • \(\forall i\in[1,n]\) 满足 \(x_i\in[0,m]\)

可以验证这就是合法的充要条件,构造每次取一个 \(x_i+x_{i+1}=S/2\) 的点和任意一个其他的点连起来即可。

然后考虑对这样的序列计数。

我们容斥枚举 \(x_i+x_{i+1}>S/2\) 的位置数,容易证明不满足的位置 \(\le 2\) 个。

先考虑没有钦定位置的情况,直接容斥得到方案数为:

\[\sum_{S=0}^k[2\mid S]\sum_{i=0}^n(-1)^i\binom ni\binom{S+n-1-(m+1)i}{n-1} \]

对于 \(S\in[0,k]\),最后一个式子是若干组合数的前缀和,对上指标奇偶性分类即可。

然后考虑钦定一个位置的情况:

枚举这两个位置的和 \(t\),暴力枚举这两个位置的所有分配,那么剩余位置的和 \(<t\)\(\le k-t\)

dp 预处理求出 \(n-2\)\([0,m]\) 中变量凑出 \(<t\) 的方案总和,容易发现 \(t\le 2m\),因此前缀和优化 dp,时间复杂度为 \(\mathcal O(nm)\)

由于还要钦定具体位置,所以最后答案记得 \(\times n\)

对于钦定两个位置的情况,容易发现这两个位置一定相邻。

设对应的三个元素分别为 \(x,t,y\),剩余部分的和为 \(s\),那么所有限制为:

\[\begin{cases} x+t<y+s\\ t+y<s+x\\ x+s+t+y\le k\\ 2\mid x+s+t+y \end{cases} \implies \begin{cases} |y-x|<t-s\\ y+x\le k-t-s\\ y+x\equiv t-s \pmod 2 \end{cases} \]

可以对所有 \((x,y)\) 二维前缀和出数量,枚举 \(s,t\) 即可,对于剩下 \(n-3\) 个元素的方案同样用 dp 出来的结果即可。

这一部分的答案也要记得 \(\times n\)

时间复杂度 \(\mathcal O(k+nm)\)

Submission Link




16. [ARC156F] Make Same Set

Problem Link

给定 \(a_1\sim a_n,b_1\sim b_n,c_1\sim c_n\)

对于每个 \(i\)\(a_i/b_i\) 加入 \(S\)\(a_i/c_i\) 加入 \(T\),求最大的 \(|S|\) 使得 \(S=T\) 并输出方案。

数据范围:\(n\le 5000\)

先考虑可以不加入 \(a_i/b_i\)\(a_i/c_i\) 的情况,这相当于类似三分图匹配的模型,建网络流即可解决。

不妨猜测这个问题的答案就是最终问题的答案。

显然答案不可能更大,我们只要保证 \(|S\cap T|\) 不变,然后使得 \(S,T\) 对称差变成 \(0\)

我们考虑调整法:

  • 如果 \(a_i\in S,a_i\not\in T,b_i\in T\)\(b_i\in S\) 也同理),直接令 \(b_i\) 加入 \(S\),显然 \(a_i\not\in S\cap T\),那么此时对称差变小,是一种合法的调整。
  • 否则对于任意 \(a_i\not\in T\iff b_i\not\in T\),显然 \(c_i\in T\),此时令 \(a_i\) 同时加入 \(S,T\)
    • 如果 \(c_i\in S\),那么 \(S\cap T\) 不变,下一次操作可以调整掉 \(c_i\) 使得对称差变小。
    • 否则 \(S\cap T\) 变大,对称差变小。

那么我们只要 \(\mathcal O(n)\) 次调整即可。

时间复杂度 \(\mathcal O(n^2)\)

Submission Link




17. [ARC157E] XXYX Binary Tree

Problem Link

给你一棵二叉树(儿子数 \(0/2\)),你需要给每个点黑白染色,使得对于 \(n-1\) 条父亲到儿子的边中:

  1. \(A\) 个黑 - 黑。
  2. \(B\) 个黑 - 白。
  3. \(C\) 个白 - 黑。
  4. 没有白 - 白。

数据范围:\(n\le 10^4\)

首先所有白色都是独立集,因此有 \(B/B+1\) 个白点(根据根的颜色决定)。

并且每个白点对 \(C\) 的贡献都是 \(0\)\(2\),因此有 \(\dfrac{C}2\) 个非叶节点。

因此我们要找一个独立集包含 \(B\) 个点和 \(B-\dfrac C2\) 个叶子,或者 \(B+1\) 个点和 \(B-\dfrac C2+1\) 个叶子。

那么我们可以 dp,设 \(f_{u,i}\) 表示 \(u\) 子树选 \(i\) 个叶子,独立集最大是多少,转移直接树形背包。

时间复杂度:\(\mathcal O(n^2)\)

Submission Link




*18. [ARC157F] XY Ladder LCS

Problem Link

给定两个长度为 \(n\) 的 01 串 \(s,t\),你可以交换若干对 \((s_i,t_i)\),最大化 \(\mathrm{LCS}(s,t)\) 并输出之,如有多解输出字典序最小的一个。

数据范围:\(n\le 50\)

首先对于每一对匹配的 \(s_i,t_j\),可以通过交换 \((s_i,t_i),(s_j,t_j)\), 使得所有 \(i>j\)

那么我们有一个暴力的做法:维护 \(dp_{i,Q}\),表示考虑到了 \(s[1,i]\),设最后一次匹配是 \(s_j,t_k\),那么 \(t[k+1,i]=Q\)

转移时枚举是否交换,是否匹配,如果把当前的 \(s_i\) 匹配了,那么就从 \(Q\) 的前面开始往后找,找到第一个 \(Q_p=s_i\),然后删掉 \(Q[1,p]\)

这样复杂度是 \(\mathcal O(n2^n)\) 的,难以通过。

观察到答案看起来比较大,事实上可以通过暴力枚举证明对于连续的 \(3\) 个位置,无论他们怎么排序,都有一种操作方式使得他们的 \(\mathrm{LCS}\ge2\)

因此答案 \(\ge 2\left\lfloor\dfrac n3\right\rfloor\),因此 \(|Q|\ge \left\lceil\dfrac n3\right\rceil\) 一定不是最优解,那么此时状态数就优化到了一个可以接受的范围。

根据题目的要求,我们要按长度为第一关键字,字典序为第二关键字比较信息,显然 可以在最高位前面加一个 \(1\) 作为符号位,那么符号位越高说明长度越大,为了求字典序最小值,把其他位 01 翻转即可,同理 \(Q\) 也能这么表示。

时间复杂度:\(\mathcal O(n2^{n/3})\)

Submission Link




*19. [Hitachi20F] Preserve Diameter

Problem Link

给定一棵 \(n\) 个点的树 \(T\),求有多少种在树上加边的方式使得得到的新图 \(G\)

  • 无重边自环。
  • 直径长度不变。
  • 对于任意一对未连接的点对,连边后图的直径都会变小。

求合法 \(G\) 的数量。

数据范围:\(n\le 2\times 10^5\)

首先我们发现,如果 \(G\) 中直径不唯一,我们可以通过缩短某条直径的不重合部分保证答案不变,因此原图直径必须唯一。

考虑 \(G\) 中的直径 \(s,t\),建立以 \(s\) 为根的 BFS 树,那么这个图合法当且仅当没有与 \(t\) 同层的其他点,并且所有连接相邻层或同层的点都已被连接。

因此一组合法的 \(\mathrm{dis}(s,1)\sim \mathrm{dis}(s,n)\) 与一个 \(G\) 构成双射。

我们发现一组 \(dis\) 合法当且仅当 \(\forall (u,v)\in T:|dis_u-dis_v|\le 1\),因此暴力枚举每条边的权值,dp 时维护 \(u\) 子树内有没有深度为 \(dis_t-dis_u\) 的点即可,当然我们的限制是至少一个,因此还要记录值是 \(0/1/\ge 2\),转移时枚举 \(dis_u-dis_v\in\{-1,0,1\}\) 即可。

但我们这样解决问题还要枚举直径起点,比较好的想法是枚举直径中点,然后 dp 时维护子树内深度为的 \(dis_t-dis_u,dis_u-dis_t\) 两种点分别有多少,两侧分别取出恰好一个点作为直径端点。

对于直径长度为奇数的边,把这条边切掉形成两棵子树分别 dp 即可。

时间复杂度 \(\mathcal O(n)\)

Submission Link




20. [ABC274Ex] XOR Sum of Arrays

Problem Link

给定 \(x_1\sim x_n\)\(q\) 次询问 \(x[a,b]\oplus x[c,d]\)\(x[e,f]\) 的字典序大小关系(两个序列的异或定义为所有元素对位异或)。

数据范围:\(n\le 5\times 10^5,q\le 5\times 10^4,x_i\le 10^{18}\)

显然只要求出最大的 \(k\) 使得 \(x[a,a+k-1]\oplus x[c,c+k-1]\oplus x[e,e+k-1]=0\) 即可。

那么我们自然考虑设计一个哈希函数维护这个过程,但普通的字符串哈希函数不支持异或,即 \((a_i\times B)\oplus (a_j\times B)\ne (a_i\oplus a_j)\times B\),即 \(\times\)\(\oplus\) 没有分配律。

注意到异或又能看成二进制下不进位加法,且乘法对加法有分配律,那么我们要单独看这个二进制数的每一位,可以用向量来看待,因此我们可以设计矩阵来描述哈希函数信息。

\(k=\log_2V\),那么把所有 \(a_i\) 看成 \(k\) 维 01 向量,而 \(B\) 看成一个 \(k\times k\) 的 01 矩阵,在 \(\bmod\ 2\) 意义下做矩阵加乘,此时 \(\oplus\)\(+\) 等价,故具有分配律。

\((\oplus,\mathrm{AND})\) 矩阵乘法可以用位运算优化到 \(\mathcal O(k^2)\),矩阵乘向量可以优化到 \(\mathcal O(k)\)

而在构造出哈希函数后,我们可以用倍增解决原问题,直接维护所有 \(a[i,i+2^k-1]\) 的哈希值即可。

时间复杂度 \(\mathcal O(nK\log N)\)

Submission Link

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/708513.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

铁矿石 短线

周初要关注893一线阻力 ABC调整结构会出现 30分钟周期:

简单纯粹

如何做到极致的简单纯粹 2024.5.16-5.172024.5.17

.Net6 web API (Log日志)

前言 需要给项目打上日志 可以查询哪里的信息下面是步骤注意:不能允许没有任何监控的系统上线 如何监控---日志记录 需要日志信息的持久化-保存到文件中,保存到数据库中; 11.11og4net日志记录 1、Nuget引l入程序包Log4net+Microsoft.Extensions.Logging.Log4Net.AspNetcore …

给github新增讨论功能

给github新增讨论功能给github新增讨论功能 giscus讨论功能说明 https://giscus.app/zh-CN giscus GitHub https://github.com/giscus/giscus/blob/main/README.zh-CN.md网站:http://shibowl.topgithub:https://github.com/hanbinjxnc博客园:https://www.cnblogs.com/hool 博…

BUUCTF-WEB(4-8)

[ACTF2020 新生赛]Include 打开题目,是一个超链接,点击后,发现URL发生了变化可以看出是文件包含,包含了一个flag.php的文件 我们试着访问/etc/passwd我又试了试伪协议,显然是被过滤了然后我们就访问了一下nginx的日志,访问成功 ?file=/var/log/nginx/access.log那我们就…

CentOS配置静态IP

CentOS配置静态IP1.查看虚拟机使用的网络连接方式2.查看虚拟机的网络连接方式IP3.1.CentOS6.8之前IP配置方法 打开系统输入setup,进入文本模式设置工具进入网络配置模式进入网络配置模式过后在进入设置配置,选项eth0网卡进入配置静态IP关闭DHCP,在静态IP,子网掩码和默认网关…

贝叶斯推断架构实现

本文用于记录贝叶斯框架原理和架构实现方案贝叶斯推断基础 贝叶斯方法提出了一个概率框架来描述如何将新的观察结果整合到决策过程中。传统的贝叶斯推断的二进制算术结构中,后验概率的计算需要大量的乘、除、加。 先验概率(由历史求因):根据以往经验和分析得到的概率,观测…

电子公文传输系统安全-进展一

上周任务完成情况每人撰写并提交一份读书笔记 小组撰写并提交一份加固计划书、一份安全性设计方案 小组撰写并提交一份系统安全设计报告 小组讨论原公文传输系统的问题不足和改进方向 小组讨论新公文传输系统的修改方案和预期效果 每人自行学习国密标准、算法知识和设计方法原公…

存储监控软件stor2rrd

stor2rrd Stor2rrd是一种开源软件工具,用于监视和报告性能存储系统,SAN开关, 和局域网开关. 它由捷克公司Xorux开发;该工具支持来自主要存储供应商的企业级存储设备;例如:IBM、Dell EMC、NetAPP、HPE、Hitachi、Lenovo、Pure Storage、Huawei、Dot Hill、INFINIDAT、Fuji…

AtCoder Beginner Contest 354

rating++A - Exponential Plant (abc354 A) 题目大意 某星球上的植物,初始高\(0\),然后每天依次增长 \(1,2,4,8,...\),问哪天就高过身高为\(h\)的高桥。 解题思路 因为是指数级别长高,枚举一下天数即可,由于\(h \leq 10^9\),因此天数不会超过 \(32\)天。神奇的代码 #incl…

鸿蒙HarmonyOS实战-Stage模型(开发卡片页面)

🚀一、开发卡片页面 HarmonyOS元服务卡片页面(Metaservice Card Page)是指在HarmonyOS系统中,用于展示元服务的页面界面。元服务是指一组提供特定功能或服务的组件,例如天气服务、音乐播放服务等。元服务卡片页面可以显示元服务的相关信息和操作选项,用户可以通过点击卡…