PKUWC2020 题意口胡

Day1

T1:
给出一个排列 P P P,令 f ( P ) f(P) f(P) 表示所有字典序比 P P P 小的排列串成的串,问 f ( P ) f(P) f(P) 本质不同的子串个数, n ≤ 50 n \le 50 n50


T2:
给出 n n n 个集合,一开始每个集合只有一个数,每次随机合并两个集合,直到只剩下 k k k
最后的答案 f ( k ) f(k) f(k) 是对这 k k k 个集合的贡献求和,每个集合的贡献是 ( m a x ( S ) − m i n ( S ) ) 2 (max(S)-min(S))^2 (max(S)min(S))2,求 f ( l … r ) f(l…r) f(lr) 的期望

简要题解:
考虑钦定选一个集合 S,那么它的贡献就是 ( m a x ( S ) − m i n ( S ) ) 2 (max(S)-min(S))^2 (max(S)min(S))2,乘上存在集合 S S S 的概率
显然只与集合的大小有关,于是需要求出 g ( i , k ) g(i,k) g(i,k) 表示 ,最后剩下 k k k 个存在 ∣ S ∣ = i |S|=i S=i 的概率
另外令 f ( i ) f(i) f(i) 表示所有大小为 i i i 的集合的贡献和
先考虑 f ( i ) f(i) f(i),考虑钦定一个最大值和一个最小值
f ( i ) = ∑ l = 1 n ∑ r = l n ( a r − a l ) 2 ∗ ( r − l − 1 i − 2 ) f(i)=\sum_{l=1}^n\sum_{r=l}^n(a_r-a_l)^2*\binom{r-l-1}{i-2} f(i)=l=1nr=ln(aral)2(i2rl1)
后面只与 r − l − 1 r-l-1 rl1 有关,于是转换为求出所有 r − l − 1 r-l-1 rl1 为某一个定值的所有 l , r l,r l,r 的贡献
拆开就可以卷积实现
考虑求 g ( i , k ) g(i,k) g(i,k),令 D ( n ) D(n) D(n) 表示把 n n n 个合并成一个的方案数,那么显然
D ( n ) = ∏ i = 2 n ( i 2 ) D(n)=\prod_{i=2}^n\binom{i}{2} D(n)=i=2n(2i)
那么将 n n n 个合并成 k k k 个的方案数就是 D ( n ) / D ( k ) D(n)/D(k) D(n)/D(k)
于是有
g ( i , k ) = D ( k ) D ( n ) ∗ ( n − k i − 1 ) ∗ D ( i ) ∗ D ( n − i ) D ( k − 1 ) g(i,k)=\frac{D(k)}{D(n)}*\binom{n-k}{i-1}*D(i)*\frac{D(n-i)}{D(k-1)} g(i,k)=D(n)D(k)(i1nk)D(i)D(k1)D(ni)

意义是把 i i i 个集合合并成一个,再把 n − i n-i ni 个集合合并成 k − 1 k-1 k1 个,有序拼接,再除一个总方案数
A n s ( k ) = ∑ i = 1 n f ( i ) ∗ g ( i , k ) Ans(k)=\sum_{i=1}^nf(i)*g(i,k) Ans(k)=i=1nf(i)g(i,k)
展开用 N T T NTT NTT 优化即可
细节记不太清,希望大家指出错误
大概就是钦定集合,转成集合大小,枚举最大最小组合数算方案,然后算出概率,用卷积优化


T3:给一个矩阵,有 p ≤ 1 e 5 p\le 1e5 p1e5 个操作来初始化,给定 s , l , r , x s,l,r,x s,l,r,x 将所有与 s s s 互质的行的 [ l , r ] [l,r] [l,r] 加上 x x x
q ≤ 5 e 4 q\le 5e4 q5e4 个询问, s , l , r s,l,r s,l,r 表示询问所有与 s s s 互质的行的 [ l , r ] [l,r] [l,r] 的和
n , m ≤ 5 e 4 n,m\le 5e4 n,m5e4


Day2


T1:你有 n n n 条鱼,每条为毒鱼或小鱼,敌方有圣盾鱼和大鱼
任意鱼和圣盾鱼对战后都会将圣盾鱼变成大鱼,只有毒鱼和大鱼对战能杀死大鱼,小鱼对战大鱼无影响
q q q 次询问 ( k , x ) (k,x) (k,x) 表示,在对方开始时已经有 x x x 条大鱼的情况下,你用 1 − k 1−k 1k 的鱼依次与对方对战,假设有 y y y 条圣盾鱼,最大化 y y y 使得能全部打完
n , q ≤ 4 e 5 n,q≤4e5 n,q4e5

好像方法很多,线性可以随便做,但还是说一下我的奇葩方法
如果当前是小鱼,那么破盾,如果是毒鱼,那么就杀死大鱼将 ans++
如果没有大鱼,那么毒鱼用来破盾
考虑离线下来做一个前缀,维护每一个 x x x 的答案
动态维护剩下多少大鱼,相当于动态维护一个数组,如果是毒鱼就是将为 0 的地方变成 1,将不为 0 的地方减 1 并将答案加 1,否则全部加 1
维护每一个权值的集合,发现只有合并,带权并查集维护


T2:给定 { a 0 , a 1 , . . . , a n } , { p 0 , p 1 , . . . , p n } \{a_0,a_1,...,a_n\},\{p_0,p_1,...,p_n\} {a0,a1,...,an},{p0,p1,...,pn},p 表示分式的横线长度也就是分式运算的优先级,问 p l . . . p r p_l...p_r pl...pr 组成的分式的值, n , q ≤ 5 e 5 n,q\le 5e5 n,q5e5

考场打的单调栈,但是有 35 没写怪可惜的
考虑一个数的贡献是本身还是逆元,发现跟单调栈的奇偶性有关,于是可以离线下来,维护每一个 l l l 的答案,考虑 r r r 的贡献就可以做,就是将据 r r r 有奇数段的全部乘逆元,有偶数段的乘本身
这样复杂度是O(段数),只能过随机数据,但类似刚刚的带权并查集对奇数段和偶数段分别维护就可以了

还有一种方法就是建出一个类似线段树的东西查询,同样随便过随机数据,考虑求出一个结点以 m i d mid mid为分界点的前缀和后缀的答案,这样一个区间只会在第一个被切开的地方求出答案
考虑一个后缀吧,是由右儿子的后缀和右儿子的全部以及左儿子的后缀组成,后面这个玩意就是将左儿子的后缀全部除一个数,线段树合并即可

还可以对建出的树用广义线段树处理,以后再学(FLAG)


T3:有一个大环顺次连接 ( i , i + 1 ) (i,i+1) (i,i+1) 边权为 1 e 9 1e9 1e9,令给出 m ≤ 1 e 5 m\le 1e5 m1e5 条边,边权为 w i ≤ 1 e 4 w_i\le 1e4 wi1e4,求任意两个点的最小割之和, n ≤ 7 e 3 n\le 7e3 n7e3

显然只会段两条边,枚举两条边,那么最小割就是两条边的权值加上穿过中间的权值,预处理二维前缀和就可以 O ( 1 ) O(1) O(1) 得到,考虑哪些点对可以以这个最小割为答案,同样是一个矩阵
于是就是矩阵覆盖单点 m i n min min 可以 O ( n 2 l o g ( n ) 2 ) O(n^2log(n)^2) O(n2log(n)2)
正解好像是用最小割树,只求 O ( n ) O(n) O(n) 次最小割,只要每次做到 O ( n ) O(n) O(n) 就可以了,但还不是很会(FLAG)

你可能感兴趣的:(省选,NOI题解)