丽泽普及2022交流赛day16 社论

这场比较平凡吧 .

省流:

http://zhengruioi.com/contest/1087

目录

时间复杂度瞎算的 .

A. Gene

题面

俩字符串 s,t,在 s 中加点字符,使 ts 的子串 .

插字符 ch 有代价 cch .

字符集 {A,C,G,T} .

题解

算法一(正解)

考虑 dp,令 dpi,j 表示 si 结尾的后缀与 t 相等的最小代价 .

转移考虑丢掉(换一个)或接续即可 .

时间复杂度 O(|S||T|),可以滚动数组 .

算法二

扫一遍 s,暴力匹配 t,如果失配了就加字符 .

是不是非常简单,和那个 dp 时间复杂度一模一样 .

时间复杂度 O(|S||T|) .

B. Fight

题面

为了争夺金坷垃, n 个人要打 m 场架,第 i 场是第 ai 个人和第 bi 个人打。

主办方突然想把这些人分成日日阵营和非非阵营(每个人都属于某一个阵营),使得只有阵营间的人会打架。但是安排已经决定,要更改安排需要时间。

你需要求出在最优的阵营划分方案中,出现两个相同阵营的人的战斗最晚是在哪一场。(数据保证一定会出现这种情况)

题解

算法一(正解)

种类并查集,非常容易 .

时间复杂度 O(nα(m)) .

算法二

考虑二分答案,于是问题变成判定是否可以划分阵营 .

等价于二分图判定,黑白染色即可 .

时间复杂度 O((n+m)logm) .

算法三

依然二分答案 .

然后可以 2-SAT 做,有个老哥这么干 80pts 超时了(悲) .

时间复杂度 O((n+m)logm) .

C. Pastry

题面

n 个宽度相同的块相邻摆放 .

将第 i 个块 ai 等分,问有多少个本质不同的分界点 .

题解

算法一(SoyTony)

m=max{ai}
拆一下 .

考虑 f(x) 表示 xx 的所有约数的分界点不同的个数 .

然后可以枚举因子 O(mlogm) 递推 .

然后对于每个 ai 把她和她的约数(去重)的 f 全加起来就好了 .

这一步枚举因子是 O(mlogm) .

总时间复杂度 O(mlogm) .


关于 f 的一些研究

这个 f 的表达式是

f(n)={0n=1n1+dn,dnf(d)n>1

通过打表得到 f(n)=φ(n)[n=1],回代也发现成立

过程

众所周知 dnφ(n)=n .

于是带入,得

φ(n)[n=1]=n1+dn,dn(φ(n)[n=1])

这个 有两个非常鬼畜的东西,一个是 dn,一个是 [n=1] .

1,n 单独处理得

φ(n)[n=1]=n1(nφ(n)[n=1])=φ(n)1+[n=1]=φ(n)[n=1]

恒成立 .

能否从递推式直接得到通项还是未解之谜 .

破案了,从 Dirichlet 卷积的角度看 .

FZ 神仙的做法

g(x)=f(x)[n=1] .

于是

g(n)=ndn,dng(d)

dng(d)=n

gI=id,显然 g=φ .

从而 f(x)=φ(x)[n=1] .

wangrx 神仙的做法

直接写成 Dirichlet 卷积形式,

f=idI(Iff)

化简得

If=idI

因为 I1=μ,于是

f=I1(idI)=μidI1I=φε

f(x)=φ(x)[x=1] .

其他

《贝尔级数》

《狄利克雷生成函数》

于是似乎就可以线性筛了(?)然而复杂度不变 qwq .

大概这种含 dn 的东西就向 Dirichlet 卷积靠吧 .

D. Conference

题面

给一个序列 {an} .

对于每个 1sn 回答询问:

  • 最小的使得序列 {aik} 存在 s 个重复元素(最多)的 k(若不存在输出 -1

题解

算法一(SoyTony)

众所周知 nk 只有 O(n) 个取值 .

然后整除分块出每个 ai 的取值块左端点并丢到一个 std::set 里 .

然后遍历那个 std::set 算一下情况下有多少个相同元素就完了 .

时间复杂度 O(12log3) .

posted @   yspm  阅读(59)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
😅​
点击右上角即可分享
微信分享提示