CF1499

A

B

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

C

枚举走几段。

横竖可以分开算。

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

D

clcm(a,b)dgcd(a,b)=x

cagcd(a,b)bgcd(a,b)=xgcd(a,b)+d

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

xgcd(a,b)+dc 分解成两个互质的数的方案数累加进答案里去。

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

而这个 2cnt 可以用筛法的方式预处理。

E

给出俩字符串 a,bxa 的子串,yb 的子串;

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

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

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

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

最终输出 dp[i][j].

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

a[i]a[i1],dp[i][j][0]+=dp[i1][j][0],但这种情况要注意:可能我们 a 的后缀选的是 a[ii],所以我们要加上这种只选了 a[i] 的情况。

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

a[i]a[i1],dp[i][j][0]+=dp[i1][j][1].

dp[][][1] 的计算同理:

b[j]a[i],dp[i][j][1]+=dp[i][j1][0],dp[i][j][1]+=a[1i] 有多少个后缀相邻不相等。

b[j]b[j1],dp[i][j][1]+=dp[i][j1][1]

F

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

posted @   FLY_lai  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示