专栏文章

The 3rd Universal Cup. Stage 2: Zielona Góra

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minithnl
此快照首次捕获于
2025/12/02 03:07
3 个月前
此快照最后确认于
2025/12/02 03:07
3 个月前
查看原文

E.

维护 fi,jf_{i,j} 表示从 SiS_{i} 的开头,从给定串的第 jj 个位置往右贪心匹配最长匹配多少,gi,jg_{i,j} 是从 SiS_{i} 的结尾,从给定串的第 jj 个位置往左贪心匹配最长匹配多少。这两个量容易类似倍增维护。
若答案串第一次出现在 SiS_{i} 里,那么这个子串一定跨过 Si1S_{i-1}Si2S_{i-2},不然 ii 可以更小。枚举这个 ii(显然是 log\log 级别的)利用 f,gf,g 取最小值即可(可能需要额外记录 f,gf,g 尽量匹配以后的位置,这个预处理也是平凡的)。

M.

这类题就是枚举每一位是什么,计算剩下的位置满足情况的排列数即可。
剩下的情况计算,对“坑”和“值”的配对情况设计一个贡献提前计算 dp 即可。如:dpi,j,k,ldp_{i,j,k,l} 表示前 ii 个物品,当前总贡献是 jj,还有 kk 个没有配对的坑,ll 个没有配对的值得方案数。转移 trivial,最终要求 dp,,0,0dp_{*,*,0,0}。其中 k,lk,l 可以互相表示,状态数可以降低一维。dp 复杂度 O(n×n2×n)=O(n4)O(n\times n^2\times n)=O(n^4)。外层枚举复杂度 O(n2)O(n^2),总复杂度 O(n6)O(n^6)

K.

我们将设计一种做法证明合法区间数量是 O(nlogn)O(n\log n) 并能够直接求出。求出后就简单了,直接 dp 即可。
考虑分治,每次仅考察跨过中点的区间。计算 midmid 往前的后缀二进制表达(把每个值视为二进制后后缀和的二进制)的 hash(可以取 sum hash) llmid+1mid+1 往后的前缀二进制表达的 hash rr
关键观察:对于一个二进制表达,最高位不高于他自己的二进制表达中,和他加起来能凑成合法区间(只有一个位是 1)的表达只有 1 个。且这个数是容易计算的。
那就好了,枚举每个表达,钦定他是高位更高的一个,去另一个区间里找能凑起来的就好了。显然这一轮找出的合法区间数量是 O(len)O(len) 的,根据这种分治的结论,len=O(nlogn)\sum len=O(n\log n)

G.

构造,yk 教我的。

L.

神经题。断环成链,合法即为没有选择的区间相交。
朴素 dpdpdpl,rdp_{l,r} 表示只考虑区间 [l,r][l,r] 的答案,转移很简单。
考虑随机的意义。它保证了答案不大。同时 dpl,rdp_{l,r} 关于 ll 是有单调性的,所以只需要记录变化的位置即可。可以用 vector 存。
实现其实不困难。

J.

十分高明。
首先给出判定条件:不可行当且仅当有一条边超过了总长度的一半。这个边一定是唯一的,因此可以枚举这条边是什么。记为 ii,我们想要计算 P(XijiXj)P(X_i\ge \sum_{j\neq i}X_j)
注意到 XiU(0,2ai)X_i\sim U(0,2^{a_i})2aiXi2^{a_i}-X_i 同样服从 U(0,2ai)U(0,2^{a_i}),因此可以说 P(XijiXj)=P(2aiXijiXj)=P(2aiiXi)P(X_i\ge \sum_{j\neq i}X_j)=P(2^{a_i}-X_i\ge \sum_{j\neq i}X_j)=P(2^{a_i}\ge \sum_i X_i)。现在问题转化为求 iXi2k\sum_i X_i\le 2^k 的概率。
设离散随机变量 AiA_i,其仅有两种取值 0 和 2i2^i,概率各为 0.5。显然有 Xi=U(0,1)+j=0ai1AjX_i=U(0,1)+\sum_{j=0}^{a_i-1}A_j
设计 dpi,jdp_{i,j} 表示已经考虑完前 ii 位,此时第 ii 位上有 jj 个 bit 的概率。转移如下:
dpi,k+j2dpi,k+j2+12ci(cik)dpi1,jdp_{i,k+\lfloor\frac{j}{2}\rfloor}\leftarrow dp_{i,k+\lfloor\frac{j}{2}\rfloor}+\frac{1}{2^{c_{i}}}\binom{c_{i}}{k}dp_{i-1,j}
其中 ci=j[aji]c_i=\sum_{j}[a_j\ge i] 表示 AiA_i 有多少个,并枚举有多少个抽中了 2i2^{i}。下取整是在考察进位。
于是我们有 P(iXi<2k)=dpk,0×12i=k+1ciP(\sum_i X_i< 2^k)=dp_{k,0}\times \frac{1}{2^{\sum_{i=k+1} c_i}}。即,在 kk 位及以前不能出现 kk 上的位,同时 kk 位以后的所有随机变量都得抽中 0。
初始状态有:
dp0,k+jdp0,k+j+12c0(c0k)fjdp_{0,k+j}\leftarrow dp_{0,k+j}+\frac{1}{2^{c_{0}}}\binom{c_{0}}{k}f_j
其中 fjf_j 是那堆 U(0,1)U(0,1) 的和 [j,j+1)\in [j,j+1) 的概率。这个东西的计算也很有讲究。
i.i.d. S1,S2,SnU(0,1)\text{i.i.d.}\ S_1, S_2, \dots S_n \sim U(0,1),则 gk=i=0k1fi=P(jSjk)g_k=\sum_{i=0}^{k-1} f_i=P(\sum_j S_j\le k)。求出 gkg_k 易得 fif_i
易得在我们的设定下概率等于高维体积,因此我们转向体积的计算。我们放开取值上界。所有数都没有取值上界时,体积为 knn!\frac{k^n}{n!},可以归纳证明。
假设至少有 xx 个数取值 >1>1,则将这 xx 个数的取值都减去 1 即可转化为原问题。因此恰有 xx 个数取值 >1>1 的体积是 (kx)nn!\frac{(k-x)^n}{n!},当然需要满足 kx0k-x\ge 0
进行二项式反演即可得到 gk=i=0k(ni)(1)i(ki)nn!g_k=\sum_{i=0}^k\binom{n}{i}(-1)^{i}\frac{(k-i)^n}{n!}
一个推论:当 kk 为实数时,gk=i=0k(ni)(1)i(ki)nn!g_k=\sum_{i=0}^{\lfloor k\rfloor}\binom{n}{i}(-1)^{i}\frac{(k-i)^n}{n!}

评论

0 条评论,欢迎与作者交流。

正在加载评论...