AGC007F 题解

题意

给定两个长为 n 的字符串 S,T,求最少进行多少次操作才能使 S=T

一次操作定义为:对于 i=1,2,..n,令第 i 位为操作的第 i1 位或操作的第 i 位。(i=1 时只能第二种)

分析

赛时想了一个假的贪心,想到设 posi 为在答案中 Ti 是由 Sposi 贡献的,可以发现 1i<n,posiposi+1,而且若 i<j 有交,一定先操作完 j

这个思路看上去没有问题,但是后面的结论是错的,当时我这样想的原因是:若 i 先操作完,j 就没有了,但真的是这样吗,可以 posi 先操作到 posj1posj 操作到 i+1 及之后。

错误原因:并没有做到最优,能早点完成的操作放在了后面做。

Update:破案了,这道题明显是倒着做消除后效性,直接贪这么后效怎么做。倒着做好写多了/kel

考虑已经得到了 posi(对于 i 找第一个 j 使得 sj=tijposi+1),相当于 S=1,2,...nT=pos1,pos2,...,posn,每次我们尽量往右扩展,然后给有用的留 1 个让它往右扩展,发现这样一定是最优的。

考虑怎么维护这个,先把无用的去掉,把相同的 S 缩到一起,每次从右往左,依次进行 把当前区间缩到只有右端点,把右端点尽量向右扩展 的流程,这是好维护的。

考虑为什么对

  1. 可以根据贪心过程逆推操作
  2. 已经是最贪的了

考虑怎么维护,找规律,发现进行了 j 次操作后,当前区间 iRi=Ri+jj。令 Rj(j>n)=+inf 即可。

posted @   SkyMaths  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示