首页 > 其他分享 >CF1499

CF1499

时间:2024-02-05 14:36:07浏览次数:27  
标签:gcd 后缀 dfrac ne CF1499 dp sim

A

B

如果 11 后出现了 00 就不行。

C

枚举走几段。

横竖可以分开算。

一定是:除了费用最小的都是走长度 \(1\),费用最小的包揽剩下的。

D

\(c\cdot lcm(a,b)-d\cdot gcd(a,b)=x\)

\(c\cdot \dfrac{a}{gcd(a,b)}\cdot \dfrac{b}{gcd(a,b)}=\dfrac{x}{gcd(a,b)}+d\)

\(gcd(a,b)\) 一定为 \(x\) 的因数,枚举 \(x\) 的因数。

把 \(\dfrac{\dfrac{x}{gcd(a,b)}+d}{c}\) 分解成两个互质的数的方案数累加进答案里去。

而分解成两个互质的数,就是对每一个质因子都选择去两边中的一边,有 \(2^{cnt}\) 中,\(cnt\) 是质因子个数。

而这个 \(2^{cnt}\) 可以用筛法的方式预处理。

E

给出俩字符串 \(a,b\),\(x\) 是 \(a\) 的子串,\(y\) 是 \(b\) 的子串;

\(x,y\) 可以用类似归并排序的方法把 \(x,y\) 的字符排到一个字符串里,使得 \(x,y\) 各自的字符相对顺序不变。

求和:对于所有 \((x,y)\) 的所有归并方法排得的字符串,有多少个相邻字符不同的字符串?(不同 \((x,y)\) 得相同结果只算一次)

定义 \(dp[i][j]\) 为对 \(a[1\sim i],b[1\sim j]\) 的后缀组合的求和。

意思就是 \(a[1\sim i]\) 的所有后缀和 \(b[1\sim j]\) 的所有后缀组合起来的答案的和。

最终输出 \(\sum\sum dp[i][j]\).

发现还不够,升一维:\(dp[i][j][0]\) 是在归并中以 \(a[i]\) 结尾的,\(dp[i][j][1]\) 是以 \(b[j]\) 结尾的。

若 \(a[i]\ne a[i - 1],dp[i][j][0]+=dp[i-1][j][0]\),但这种情况要注意:可能我们 \(a\) 的后缀选的是 \(a[i\sim i]\),所以我们要加上这种只选了 \(a[i]\) 的情况。

这种情况又分两种:① 如果 \(a[i]=b[j]\),这种情况不存在,因为 \(a[i]\) 接不了;② 否则就是查询 \(b[1\sim j]\) 中有多少个后缀相邻的不相等,这个也可以预处理。

若 \(a[i]\ne a[i - 1],dp[i][j][0]+=dp[i-1][j][1]\).

\(dp[][][1]\) 的计算同理:

若 \(b[j] \ne a[i],dp[i][j][1]+=dp[i][j-1][0],dp[i][j][1]+=a[1\sim i]\) 有多少个后缀相邻不相等。

若 \(b[j]\ne b[j - 1],dp[i][j][1]+=dp[i][j-1][1]\)

F

有多少种方式删掉一些边,使得树分成的连通分支的直径都 \(\le k\)?

标签:gcd,后缀,dfrac,ne,CF1499,dp,sim
From: https://www.cnblogs.com/FLY-lai/p/18007903

相关文章