题意

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

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

分析

赛时想了一个假的贪心,想到设 \(pos_i\) 为在答案中 \(T_i\) 是由 \(S_{pos_i}\) 贡献的,可以发现 \(\forall 1\le i < n, pos_i\le pos_{i + 1}\),而且若 \(i < j\) 有交,一定先操作完 \(j\)。

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

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

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

考虑已经得到了 \(pos_i\)(对于 \(i\) 找第一个 \(j\) 使得 \(s_j = t_i\) 且 \(j \le pos_{i + 1}\)),相当于 \(S = 1, 2, ... n\),\(T = pos_1, pos_2, ..., pos_n\),每次我们尽量往右扩展,然后给有用的留 1 个让它往右扩展,发现这样一定是最优的。

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

考虑为什么对

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

考虑怎么维护,找规律,发现进行了 \(j\) 次操作后,当前区间 \(i\) 的 \(R_i = R_{i + j} - j\)。令 \(R_j(j > n) = +\inf\) 即可。

AGC007F 题解的更多相关文章

  1. AtCoder随做

    突然发现只有我没写过 AT. 没写题解不意味着没做,有的忘了写或者太草率了就算了. 部分前言删了. 目录 ABC020D ABC241G ABC268 AGC003D AGC004D AGC004E ...

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  5. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  6. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  7. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  9. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  10. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. Servlet3.0+SpringBoot2.X注解Listener常用监听器

    监听器:应用启动监听器,会话监听器,请求监听器 作用: ServletContextListener 应用启动监听 HttpSessionLisener 会话监听 ServletRequestList ...

  2. Oracle 锁表查询和解锁方法

    system登录 查询被锁表信息 select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, ...

  3. 各类配置文件(DNS, Firefox,Edge)

    DNS配置 腾讯DNS: 119.29.29.29 2402:4e00::  2402:4e00:1:: 阿里云: 223.5.5.5 223.6.6.6 2400:3200::1 2400:3200 ...

  4. 题解:CF1957A Stickogon

    CF1957A Stickogon 题意 题意十分简单,给予你 \(n\) 个棍子,问这些棍子可以构成多少个正多边形. 思路 说是可以构成多少个正多边形,所以我们可以用边最少的正多边形等边三角形来计数 ...

  5. redis实现分片集群

    为什么要使用分片集群? 主从和哨兵可以解决高可用.高并发读的问题.但是仍存在海量数据存储.高并发写问题 分片集群特征: 集群中有多个master,每个master保存不同数据. 为master置备了后 ...

  6. 关于android的图像视图的基本了解

    最好直接复制进去而不是拖进去 图片直接导入最好用小写字母命名,数字与字母之间要用_,而且数字好像不可以连用 centerInside,fitCenter,center的区别: centerInside ...

  7. 2023/4/17 SCRUM个人博客

    1.我昨天的任务 学习了easydict库的基本操作 2.遇到了什么困难 没有找到合适的人脸识别库 3.我今天的任务 初步学习dlib的安装,了解dlib的基础组件

  8. TCP和KCP协议

    TCP协议 KCP是一个快速可靠协议,能以比 TCP 浪费 10%-20% 的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果.纯算法实现,并不负责底层协议(如UDP)的收发 ...

  9. Jmeter函数助手38-isVarDefined

    isVarDefined函数用于判断变量是否存在. 变量的名称:填入变量名称.如果变量存在返回true,如果不存在返回false 1.先一些定义变量 ${__isVarDefined(now)},no ...

  10. 【Layui】15 日期时间选择器 Laydate

    文档地址: https://www.layui.com/demo/laydate.html [基本案例] 基本日期与国际日期 <fieldset class="layui-elem-f ...