2021省选模拟总结

2021 省选模拟总结

2021.2.20

T1. 人生如一叶

题目要求最大团,而最大团 = 补图的最大独立集。考虑原图的补图,可以发现其有优美的性质——补图是一张二分图。

二分图的最大独立集 = 点数 - 最大二分匹配 × 2,匈牙利 / 网络流求最大二分匹配即可。


2021.3.29

T1. 要换换名字(name)

可以发现,当一个字符串有不少于 m 个不同的子序列时,其一定有解。

所以对于每个字符串,只需要找出前 n 小的子序列,设 Nexti,c 表示第 i 位后第一个字符 c 的位置,BFS 找子序列,由于不同字符串之间可能有相同子序列,所以需要 triehash 判重。

每个字符串向子序列连边,发现是一张二分图,二分 + 匈牙利找最大匹配即可。

T3. 获取名额(orz)

最终答案显然为 1i=lr(1aix)

ai/x 比较大(即 1ai/x 较小)时,1ai/x 收敛得会很快(0.520<106),当其小于 106 时就可以直接输出了。

但是当 ai/x 比较小精度就过不去了,有 1ai/x=exp(ln(1ai/x))

又知道 ln(1+x) 的泰勒展开 n=0n+1(1)nxn+1

所以我们可以设定阈值 L=0.5,每次询问将区间中的数分为两部分,由以上分析可知第一部分的数大概在 25 左右;对于第二部分,可以分别预处理出泰勒展开的前 25 项的前缀和。最后答案为 1 - 两部分的贡献相乘。

注意 x>max(ai),所以可以将 x 代换为 x/max(ai)ai 代换为 ai/max(ai) 以避免高精。


2021.3.30

T1. 神奇纸牌(uno)

对于每一张纸牌有 24 种颜色存在状态,所以我们可以 224 枚举所有点数的颜色存在状态并,并查集判断并的合法性,注意!一个并合法当且仅当 并中出现的颜色 全部联通。

那么问题就转化为了有 n 个带标号的球和 m 个带标号的盒子,要求每个盒子非空的方案数,

简单容斥可以得出方案数为 i=0m(1)miin(mi)

T3. 打扫笛卡尔(cartesian)

考虑递推,设 fi 为序列长度为 i 的期望舒适度的和,gi 为序列长度为 i 时期望打扫得到的树的大小之和。

易得:

fi=gi+j=0i1(i1j)12(fj(ij1)!+fij1j!)

简单转换可得:

fi=gi+j=0i1(i1)!j!(ij1)!fj(ij1)=gi+j=0i1(i1)!j!fj

类似地可以得到:gi=i!+j=0i1(i1)!jgj

fg 显然可以 O(n) 递推,时间复杂度 O(n)


2021.4.1

T1. 异或(inception)

令二进制下 x 的最高位为 k,将消去最低 k 位后相同的 ai 归为一组。

可以发现,一组内的选择方案只可能是 0, 1, 20, 1 的方案数显然,2 的方案数可以用 trie 简单求出。组与组之间的方案数直接相乘。

T2. 计数(interwoven)

等价地求小于等于 x 方案数,令 fi 为到第 i 位地方案数,转移简单:fi=kfi1(k1)fix

可以发现转移式等价于:一张 N 个点的图,ii+1a 条边,ii+xb 条边,求 1N 的方案数,这个问题可以枚举 b 的个数计算:

i=0N/x(i+Nix1i)biaNix1

而代回原问题可得:

fi=gigixgi=j=0n/i(j+ijx1j)(1k)jkijx1

O(ni) 预处理 fi,总时间复杂度 O(nlogn)


2021.4.2

T1. 盗梦空间(inception)

首先以题目所给的 K 个点为关键点建出虚树,分情况计算 u 点:

  1. u 在虚树的点上,令 fi 表示据 i 最近的关键点的距离,简单树形 dp 计算。

  2. u 在虚树边上的某一点,对于长为 len 的边 (x,y),答案显然为 fx+fy+len2。但是当 |xy|len 时需要特判。

  3. u 在虚树边上的某一点延伸出的子树的深度最大的点上(不包括端点),对于边 (x,y),找出边上的分界点 z 使得 z 一下的点离 fy 更近,z 以上的点离 fx 更近。

    对于 z 以上的点,贡献为 fx+depmaxdepudepmax 表示 z 以上子树中最大深度,倍增维护。

    对于 z 一下的点,贡献为 fy+depy+depmax2depv,其中 vz 一下子树深度最大的点,depmax 为其子树最大深度,同样可以倍增维护。

  4. u 在虚树某一点延伸出子树中深度最大的点,其实与 3 本质相同,但是为了方便计算所以分开了。

    将每个点的儿子提前按最大深度排序,每次遍历儿子找到第一个不在虚树或虚树的边上的儿子,这样每次询问遍历的点不会超过 K,从而保证的时间复杂度的正确。贡献为 fx+depmaxdepx

最后还需要注意一些细节。

T2. 爱乐之城(lalaland)

g(n)=i=1nij=1n[ij]kf(n)=i=1nj=1nμ(ij),然后大力推式:

g(n)=2(i=2nij=1i[ij]j)+1g(n)=2(i=2niφ(i)i2)+1g(n)=i=1ni2φ(i)

由此我们可以 O(n) 预处理出 g(n)。然后对 f(n) 大力推式:

f(n)=i=1nj=1n[ij]μ(ij)f(n)=i=1nj=1nμ(i)μ(j)d|(i,j)μ(d)f(n)=d=1nμ(d)d|iμ(i)d|jμ(j)f(n)=d=1nμ(d)(d|iμ(i))2

可以发现, n 只会影响 d|n 的项,所以可以增量求解,时间复杂度调和级数。

最后考虑答案 F(S)=TSf(gcd(aT))aTg(a),构造函数 h(d) 使得 f(n)=d|nh(d),代入得:

F(S)=TS(d|gcd(T)h(d))aiTg(ai)F(S)=d=1mdd|ai(g(ai)+1)

可以发现 S 中每加入一个 ai,只会影响约束个数个 d,由于保证 ai 互不相同,复杂度依旧是调和计数。


2021.4.5

T1. 悄悄话(word)

考虑从后往前做,令 fi 表示最后一句话是 i 串的最大权值和。

将所有串拼接并求出 sa,可以发现包括整个串 i 的后缀构成一个区间,st 表 + 二分可以 O(logn) 找出区间。

区间求 max 线段树维护即可,每求出 fi,遍历其所有后缀更新线段树上节点。

总时间复杂度 O(|si|log(|si|))


2021.4.7

T1. 染色(coloring)

设第 i 条横线包括的横线范围为 [li,ri],可以发现排序后 li, ri 都是单调不下降的。

考虑先染斜线,为了不算重,保证每一条不染的斜线都没有被染的横线 完全包含。考虑 dp,设 fi,j 为第 i 条斜线必选且 [rij+1,j] 的横线都被染的方案数,同时令 gi=fi,j

枚举上一条染的斜线 k,分情况讨论:

  1. rk<li,此时需要保证 [rij+1,j] 被染,rij 不染,[li,rij1] 可染可不染,斜线 k 染色状态不会对 i 造成影响,所以总的贡献为 2rilijgk

  2. rij>rk,同上需保证 [rij+1,j] 被染且 rij 不染,但是可选择横线区间变为 [rk+1,rij1],斜向 k 的染色状态同样无影响,总贡献为 2rirkj1gk

  3. rij<=rk,此时斜线 krkri+j 位必染,且 rkri+j1 位不染,总贡献为 fk,rkri+j

最终答案为 gi

posted @   buzzhou  阅读(129)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开