Loading

ARC186 做题记

A (Underclued)

题意

对于每个元素均为 \(0\)\(1\)\(N\) 阶方阵 \(A,B\),若满足以下条件,则称 \(A\)\(B\) 相似

  • 每一行的元素和相等。即对于任意 \(i=1,\dots,N\),都有 \(A_{i,1}+\dots+A_{i,N}=B_{i,1}+\dots+B_{i,N}\)
  • 每一列的元素和相等。即对于任意 \(j=1,\dots,N\),都有 \(A_{1,j}+\dots+A_{N,j}=B_{1,j}+\dots+B_{N,j}\)

此外,对于每个元素均为 \(0\)\(1\)\(N\) 阶方阵 \(A\) 和整数 \(i,j\)\(1\leq i,j\leq N\)),如果对于所有与 \(A\) 相似的方阵 \(B\),都有 \(A_{i,j}=B_{i,j}\),则称 \(A\) 的第 \(i\) 行第 \(j\) 列元素是被固定的

请回答以下 \(Q\) 个询问。

  • \(i\) 个询问:是否存在某个 \(N\)\(0,1\) 方阵,使得其被固定的元素恰好有 \(K_i\) 个?若存在,输出 Yes,否则输出 No

\(N\le 30\)

题解

困难题,需要一些小观察。

结论 \(1\): 建立两边各 \(n\) 个点的二分图,如果 \(a_{i,j} = 0\)\(L_i\)\(R_j\) 连边,否则 \(R_j\)\(L_i\)。那么两个矩阵相似等价于每个点的出入度相同。

结论 \(2\): 不动点的数量等于这张图上不在任何环上的边的数量。

结论 \(1\) 是显然的:入度就是行和,出度就是列和;结论 \(2\) 只需要把每个环倒转方向后的图都拿出来,他们和原图都相似,这时候只有非环边不变。

所以直接 dp 就行了:设 \(f_{i,j,k}\) 为左部 \(i\) 个点,右部 \(j\) 个点,有 \(k\) 条环边的方案数。转移就是枚举一个强连通分量,两侧分别有 \(u,v\) 个点,那么会多出 \(u \times v\) 条环边。最后从任意的 \(f_{i,j,*}\) 转移到答案。

时间复杂度 \(\mathcal{O}(\frac{n^6}{w})\)

\(\bf{record}\)

B (Typical Permutation Descriptor)

题意

给定一个长度为 \(N\) 的整数序列 \((A_1,\dots,A_N)\)。该整数序列满足对于每个 \(i=1,\dots,N\),都有 \(0\leq A_i < i\)。请计算满足以下条件的 \((1,\dots,N)\) 的排列 \((P_1,\dots,P_N)\) 的个数,并对 \(998244353\) 取模。

  • 对于每个 \(i=1,\dots,N\)
    • 对于所有满足 \(A_i < j < i\) 的整数 \(j\),都有 \(P_j > P_i\)
    • 如果 \(A_i > 0\),则 \(P_{A_i} < P_i\)

保证对于输入给定的 \((A_1,\dots,A_N)\),一定存在满足条件的排列。

\(1\leq N\leq 3\times 10^5,0\leq A_i < i\)

题解

注意到 \(A_i\) 就是 \(i\) 左边第一个大于其的数。

再注意到在用单调栈构建笛卡尔树的过程中,我们其实不需要知道每个数具体的值,只需要知道每个值左边第一个大于其的数即可构建出笛卡尔树。

所以问题转变为存在多少种向笛卡尔树中填数的方案。

相当于树的拓扑序计数,答案为 \(\frac{n!}{\prod_{u} sz_u}\)

\(\bf{record}\)

C (Ball and Box)

题意

球橋和箱木进行一个用球和箱子的游戏。

一开始,球橋有 \(M\) 种不同的球,每种球各有 \(\infty\) 个,箱木有 \(\infty\) 日元。同时有 \(N\) 个箱子,第 \(i\) 个箱子的容量为 \(V_i\),价格为 \(P_i\) 日元。在游戏过程中,箱木可以随时购买任意箱子。

游戏过程中,以下操作会不断重复,直到游戏结束:

  1. 球橋选择一种球,递给箱木。
  2. 箱木可以选择接收这个球,或者 拒绝接收并结束游戏
  3. 如果箱木接收了球,他需要从已购买的箱子中选择一个,将球放入该箱子。
  4. 放入球后的箱子 满足以下条件,箱木获得 \(1\) 日元,否则 游戏结束
    • 箱子中的球的数量不超过该箱子的容量。
    • 箱子中的所有球都是同一种类型。

箱木想让最终自己的钱最多,球橋相反要搞破坏。求箱木的所持金钱最多能增加多少?

注意双方都知道所有信息,并且绝顶聪明

\(1 \leq N, M \leq 3 \times 10^5,1 \leq V_i, P_i \leq 10^9\)

题解

称买盒子放球的人为 A,发配不同颜色的球的人为 B。

我们发现 A 的决策比较麻烦,因为他每次买什么盒子是需要决策的;而 B 显得就比较单纯可爱了:

A 手上有一些盒子,那么 B 肯定希望 A 去买新盒子,所以如果目前 A 存在一种颜色没法放了,B 会给他发一个这个颜色的球,A 去买一个新盒子。如果不存在这样的颜色,那么 B 肯定希望 A 尽快买新盒子,所以会选择容量最小的那个盒子填满,然后再放一个这个颜色的球,这样就需要买新盒子了。

现在 B 的决策固定了,我们只需要计算对于一种 A 选盒子的方案,收益是多少就行了。

回忆一下目前的计算方式:

  • 维护一个集合 \({S}\)

  • \(|{S}| < m\) 时,加入一个 \((v,p)\),获得 \(-(p-1)\) 的收益;

  • \(|{S}| = m\) 时,删除 \(v\) 最小的 \((v,p)\),获得 \(v-1\) 的收益,回到上一步。

我们发现最后剩下的 \((v,p)\) 一定是 \(v\) 最大的 \(m-1\) 个。所以先对 \(v\) 排序,然后做一遍扫描线。

前缀要选出所有 \(v-p > 0\) 的,后缀要选出 \(p\)\(m-1\) 小的,用堆维护即可。

记得特判 \(m=1\),时间复杂度 \(\mathcal{O}(n \log n)\)

\(\bf{record}\)

D (Polish Mania)

题意

非空非负整数序列 \((V_1,\ V_2,\ \dots,\ V_M)\) 被称为 Polish,其递归定义如下:

  • 存在 \(V_1\) 个 Polish 序列 \(W_1,\ W_2,\ \dots,\ W_{V_1}\),使得将序列 \((V_1),\ W_1,\ W_2,\ \dots,\ W_{V_1}\) 按顺序连接后,恰好得到序列 \((V_1,\ V_2,\ \dots,\ V_M)\)

特别地,序列 \((0)\) 是 Polish。

给定一个长度为 \(N\) 的非负整数序列 \((A_1,\ A_2,\ \dots,\ A_N)\)。请你求出,长度为 \(N\)、字典序不大于 \((A_1,\ A_2,\ \dots,\ A_N)\) 的 Polish 序列的个数,对 \(998244353\) 取模。

关于序列的字典序:设 \(S = (S_1,S_2,\ldots,S_{|S|})\)\(T = (T_1,T_2,\ldots,T_{|T|})\),则 \(S\) 的字典序小于 \(T\),当且仅当满足以下两条之一(其中 \(|S|,\ |T|\) 分别为 \(S,T\) 的长度):

  1. \(|S| < |T|\)\((S_1,S_2,\ldots,S_{|S|}) = (T_1,T_2,\ldots,T_{|S|})\)
  2. 存在整数 \(1 \leq i \leq \min\lbrace |S|,\ |T| \rbrace\),使得以下两点同时成立:
    • \((S_1,S_2,\ldots,S_{i-1}) = (T_1,T_2,\ldots,T_{i-1})\)
    • \(S_i\) 小于 \(T_i\)(按数值比较)。

\(1\leq N \leq 3\times 10^5,0\leq A_i < N\)

题解

结论:一个序列合法当且仅当:

  • \(\sum a_i = n-1\)
  • 不存在 \(i \in [1, i-1]\) \(\sum\limits_{j=1}^{i} a_j \le i-1\)

转化问题:

\(a_i\) 是非负整数序列,其前缀和为 \(s\)。称其是好的当且仅当:

  • \(s_n=n-1\)

  • \(\forall i\in [1,n-1],s_i\ge i\)


钦定 \(a_0=1,s_i>i,s_n=n\)

相当于求 \((0,1)\to (n-1,n)\) 不经过直线 \(y=x\) 的的方案数。

这东西是格路计数,反射容斥一下,答案为:

\[F(0,1,n-1,n)-F(1,0,n-1,n) \]

其中 \(F(a,b,c,d)=\dbinom{c+d-a-b}{c-a}\)

然后字典序的限制就枚举 LCP,枚举不同的位填啥,然后假设走到 \((x,y)\),答案为 \(F(x,y,n-1,n)-F(y,x,n-1,n)\)

由于不能走过 \(n\),于是暴力枚举是可以接受的。

\(\bf{record}\)

E (Missing Subsequence)

题意

给定一个由 \(1,\dots,K\) 组成、长度为 \(M\) 的整数序列 \((X_1,\dots,X_M)\)

请计算满足以下条件的长度为 \(N\) 的整数序列 \((A_1,\dots,A_N)\)(每个元素均为 \(1,\dots,K\))的个数,并将结果对 \(998244353\) 取模后输出。

  • 在所有由 \(1,\cdots,K\) 组成、长度为 \(M\) 的整数序列中,只有 \((X_1,\dots,X_M)\) 不能作为 \((A_1,\dots,A_N)\) 的(不要求连续的)子序列。

\(2\leq M,K \leq N \leq {\color{red}{10^5}},1\leq X_i \leq K\)

题解

这道题主打一个简单粗暴,条件看起来很神秘,但是直接做就能顺利解决。

首先找到序列 \(A\) 里面的第一个 \(1, 2, 3, \dots, k\), 那么容易发现:

  • 第一个 \(X_1\) 后面的 \(A\), 应该包含所有长为 \(m-1\) 但不为 \(X_2, X_3, \dots, X_m\) 的序列为子序列。

  • 其他数第一次出现之后的 \(A\), 则应该包含所有长为 \(m-1\) 的序列为子序列。

这样就很有递推性质了!

提取出 \(A\) 中最短的在每个数的前缀,这个前缀以外的方案数就是一个 \(m\) 减少了 \(1\) 的子问题。

不断划分下去,可以划分出 \(m-1\) 个前缀和一个 \(m=1\) 时容易解决的子问题。只要求出每个前缀的情况数然后再乘起来就可以。

那么这个前缀有什么限制呢?

首先,可以得出 \(X_1\) 应该只在前缀的末尾出现过一次,其为最晚出现的数。

同时,由于那个 \(X_1\) 后面的序列包含所有长为 \(m-1\) 但不为 \(X_2, X_3, \dots, X_m\) 的序列为子序列,那么它显然会包含 \(X_3, X_4, \dots, X_m\) 为子序列。

因此 \(A\) 里面出现第二晚的数后面的序列能把 \(X_2, X_3, \dots, X_m\) 这个子序列补回来的充要条件就是 所选前缀内,出现第二晚的数后面存在至少一个 \(X_2\)

这里 出现 指的是第一次出现,第二晚出现即 第一次出现的时刻第二晚

\(X_1 = X_2\) 时,就没有第二个条件的限制,前面用个 \((e^{(n-1)x}-1)^{k-2}\) 算算即可。

\(X_1 \neq X_2\) 的情况都等价,也就是说前缀的情况数只和 \([X_1 = X_2]\) 和前缀长度有关。

这东西大概就对第二晚出现的数这个位置分段,然后每段写个 GF 再乘起来即可。

即我们也不关心第二晚出现的数是啥,只关心其位置,最后 \(\times (k-1)\) 即可。

然后再统计有多少 \(i\) 满足 \(X_i = X_{i+1}\),再用多项式快速幂合并即可。时间复杂度 \(\mathcal{O}(n \log n)\)

\(\bf{record}\)

posted @ 2025-09-06 16:51  HaHeHyt  阅读(16)  评论(0)    收藏  举报