ARC199 做题记
A (Flip Row or Col 2)
题意
给定一个 \(N\times N\) 的 \(01\) 矩阵 \(A\) 和两个长度为 \(N\) 的序列 \(R,C\)。
要求构造 \(01\) 序列 \(X,Y\)。含义如下:
-
flip第 \(i\) 行当且仅当 \(X_i=1\)。 -
flip第 \(i\) 列当且仅当 \(Y_i=1\)。
并且使得完成上述操作后:第 \(i\) 行/列的所有数字之和为 \(R_i/C_i\)。
判断是否存在构造,若存在给出方案。
\(1\le N\le 10^3,0\leq R_i,C_j\lt \color{red}{\dfrac{N}{4}}\)
题解
神秘小限制!
发现异或是可以随意叠加的,或者说可以重复操作。
首先钦定第一行操作成全 \(0\)。
然后接下来操作 列 只会操作 \(x=R_1<\dfrac{N}{4}\) 次。
然后观察 \(2\sim N\) 行,发现如果此时其 \(1\) 的个数 \(>\dfrac{N}{2}\) 则一定要操作,否则一定不能操作。
不然 \(1\) 的数量就不满足 \(<\dfrac{N}{4}\) 的限制啦!
于是此时再对每一列再根据列和决定是否操作,最后再判断整体是否合法即可。
复杂度 \(\mathcal{O}(N^2)\),代码很好写。
B (Adjacent Replace)
题意
\(T\le 50\) 组多测。
给定一个长度为 \(N\) 的非负整数序列 \(A\) 和一个非负整数 \(K\)。
请判断是否可以通过不超过 \(10^4\) 次以下操作使得 \(A_1=K\)。
- 选择一个整数 \(i\in[1,N-1]\),令 \(x=A_i\text{ xor } A_{i+1}\),然后将 \(A_i\) 和 \(A_{i+1}\) 都替换为 \(x\)。
给出任意一组合法构造或判断无解。
\(3\le N\le 60,0\le A_i,K\lt 2^{60}\)
题解
考虑到只要进行了一次操作,数列中必然有两个相邻的数相等。
而相等的两个数能带来诸多操作便利!于是枚举第一步。现在有两个相等的数 \(a,a\)。
发现 \((a, a, b) \to (a, a \oplus b, a \oplus b) \to (b, b, a \oplus b) \to (b, a, a)\)。
又发现 \((a, a, b) \to (a, a \oplus b, a \oplus b) \to (a, 0, 0) \to (a, a, 0) \to (a, a, a) \to (0, 0, a) \to (0, a, a)\)。
于是 剩下的数选或不选均可,跑遍线性基判断有无解。
构造就左右左推一遍即可。复杂度 \(\mathcal{O}(Tn^2\log V)\)。
C (Circular Tree Embedding)
题意
给定一棵 \(n\) 个点的树 \(T\),和一个长度为 \(n\) 的排列 \(p\)。
令复合记号 \(T'=p\circ T\) 表示 \(\forall(u,v)\in T\),\(T'\) 上连边 \((p_u,p_v)\)。相当于把树上节点编号进行了一个映射。
称一棵树是好的,当且仅当把 \(1\sim n\) 围成一个环,\(\forall(u,v)\in T\) 则环上 \(u,v\) 之间连线,满足连线两两不交。
给定 \(m\) 个 \(1\sim n\) 的排列 \(P_1\sim P_m\)。
求有多少个 \(n\) 个顶点的树 \(T\),使得 \(\forall i\in [1,m],P_i\circ T\) 是好的。对 \(998244353\) 取模。
\(2\leq n,m\leq 500\),保证所有 \(P_i\) 是排列。
题解
- 考虑一个套路:就是人为钦定一个好看的初始状态,获取更多限制。
考虑 \(P_{i,*}\) 集体 \(+x\bmod n\) 和全体 \(P\) 复合上一个排列都是不会改变问题答案的。
于是不妨先把每个 \(P_i\) 加到 \(P_{i,1}=1\)。
然后全体复合上 \(P_1\) 的逆排列,此时 \(P_1=[1,2,\cdots,n]\)。
钦定树根为 \(1\)。发现此时若树 \(T\) 满足条件,则必须满足树 \(T\) 的每颗子树中点编号都构成一个 \([l,r]\) 区间。
- 同时,树 \(P_{i\ge 2}\circ T\) 的每颗子树也构成区间。
于是树 \(T\) 连边的可能性就被我们刻画清楚了。
\([l,r]\) 能连边,当且仅当 \(P_{i\ge 2}\circ [l,r]\) 依然是一个区间,但不一定是 \([l,r]\) 就是了。
然后你有若干合法区间,你要连成一个以 \(1\) 为根的合法树。
这东西显然是一个区间 dp 的形式,先设上 \(f_{l,r}\) 表示区间 \([l,r]\) 连成的方案数。
然后比如你考虑剥掉 \(1\),则形成了若干子树,并且子树也得满足条件。
于是我们把散子树再记一个状态 \(g_{l,r}\),表示 区间 \([l,r]\) 连成的可能是若干散子树的方案数。
发现最后剥 \(1\),答案即是 \(g_{2,n}\)。不好用 \(f\) 算是因为 \(f\) 没有钦定根。
初值 \(g_{i,i-1}=1\) 保证边界情况,转移 \(f\) 就枚举树根的位置,\(g\) 就拆掉最左边子树转移。
-
\(f_{l,r}=\sum\limits_{rt=l}^r g_{l,rt-1}g_{rt+1,r},\text{check}(l,r)=1\),也就是说 \(f\) 只能在好区间处转移。
-
\(g_{l,r}=\sum\limits_{k=l}^{r} f_{i,k}g_{k+1,r}\)
复杂度 \(\mathcal{O}(n^3)\)。
D (Limestone)
题意
给你一个正整数 \(n,m\)。给定初始全 \(0\) 的 \(n\times m\) 矩阵 \(A\)。
你可以对这个矩阵进行以下两种类型的运算,运算的顺序和次数不限:
- 选择整数 \(r,c\ (1\leq r\leq n,1\leq c\leq m)\),将 \(A_{r,1},A_{r,2},\ldots,A_{r,c}\) 全部赋值为 \(1\)。
- 选择整数 \(r,c\ (1\leq r\leq n,1\leq c\leq m)\),将 \(A_{1,c},A_{2,c},\ldots,A_{r,c}\) 全部赋值为 \(1\)。
请你求出通过上述操作能够得到的所有矩阵 \(A\),对于每个矩阵,计算 \(\displaystyle\sum_{i=1}^n\sum_{j=1}^m A_{i,j}\),将所有这些和相加,最后对 \(998244353\) 取模,输出结果。
\(1\le nm\leq 2\times 10^5\)
题解
这东西你先考虑数能得到的矩阵数,再数 \(1\) 的个数和。记录 \(f_{n,m}\) 表示前者,\(g_{n,m}\) 表示后者。
初值:\(f_{0,*}=f_{*,0}=1,g_{0,*}=g_{*,0}=0\)
然后比如 \(f\) 的转移就考虑两种情况:
-
最后一行全占满。
-
最后一行选了前缀 \(x\) 个,第 \(x+1\) 个一定不选,后面有 \(y\) 个是一整列选的。
于是容易写出 \(f\) 的转移式,\(g\) 也是完全一样,乘个系数罢了。
\(\begin{aligned} f_{i,j}&=f_{i-1,j}+\sum\limits_{0\le x+y<j} \dbinom{j-1-x}{y}f_{i-1,j-y}\\ &=f_{i-1,j}+\sum\limits_{y=0}^{j-1} f_{i-1,j-y}\sum\limits_{X=y}^{j-1}\dbinom{X}{y}\\ &=f_{i-1,j}+\sum\limits_{y=0}^{j-1} f_{i-1,j-y}\dbinom{j}{y+1} \end{aligned}\)
\(\begin{aligned} g_{i,j}&=g_{i-1,j}+jf_{i-1,j}+\sum\limits_{0\le x+y<j} \dbinom{j-1-x}{y}(g_{i-1,j-y}+(x+iy)f_{i-1,j-y})\\ &=g_{i-1,j}+jf_{i-1,j}+\sum\limits_{y=0}^{j-1} \dbinom{j}{y+1}(g_{i-1,j-y}+iyf_{i-1,j-y})+\sum\limits_{y=0}^{j-1} f_{i-1,j-y}\sum\limits_{x=0}^{j-1-y}\dbinom{j-1-x}{y}x\\ &=g_{i-1,j}+jf_{i-1,j}+\sum\limits_{y=0}^{j-1} \dbinom{j}{y+1}(g_{i-1,j-y}+iyf_{i-1,j-y})+\sum\limits_{y=0}^{j-1} f_{i-1,j-y}\dbinom{j}{y+2} \end{aligned}\)
最后一个等号是因为如下上指标范德蒙德卷积:
复杂度 \(\mathcal{O}(nm\min (n,m))=\mathcal{O}((nm)^{1.5})\),足以通过。
感觉这类题在 ARC 已经套路化了?ARC193 和这个就长得有点像。

浙公网安备 33010602011771号