AGC007F 题解
题意
给定两个长为 \(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 缩到一起,每次从右往左,依次进行 把当前区间缩到只有右端点,把右端点尽量向右扩展 的流程,这是好维护的。
考虑为什么对
- 可以根据贪心过程逆推操作
- 已经是最贪的了
考虑怎么维护,找规律,发现进行了 \(j\) 次操作后,当前区间 \(i\) 的 \(R_i = R_{i + j} - j\)。令 \(R_j(j > n) = +\inf\) 即可。
AGC007F 题解的更多相关文章
- AtCoder随做
突然发现只有我没写过 AT. 没写题解不意味着没做,有的忘了写或者太草率了就算了. 部分前言删了. 目录 ABC020D ABC241G ABC268 AGC003D AGC004D AGC004E ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- 新一代Java高性能构建工具Maven-mvnd【实践可行版】
Maven-mvnd介绍 Maven 的优点是稳定可靠,在绝大多数的项目上工作良好,社区生态很完善,几乎所有的 Java 开发者都在用.Maven 的缺点是,对于大一点的项目来说,构建太慢了.有时候只 ...
- SELECT *问题
1.mysql拿到一条命令,会去解析命令.优化查询,然后去存储引擎执行查找.SELECT * 语句取出表中的所有字段,会解析更多的 对象,字段,权限,属性相关,不论该字段的数据对调用的应用程序是否有用 ...
- 记一次 redis 事件注册不当导致的内存泄露
线上的程序跑着跑着内存越来越大,并且没有下降的趋势,重启一下程序也只能短暂恢复.通过 htop 命令再按一下 M 键按内存占用大小排个序,程序会占好几个G.那好,让我们来分析一下. 收集dump 通过 ...
- 2024-07-24:用go语言,给定一个整数数组 nums,其中至少包含两个元素。 可以根据以下规则执行操作:选择最前面两个元素删除、选择最后两个元素删除,或选择第一个和最后一个元素删除。 每次操作
2024-07-24:用go语言,给定一个整数数组 nums,其中至少包含两个元素. 可以根据以下规则执行操作:选择最前面两个元素删除.选择最后两个元素删除,或选择第一个和最后一个元素删除. 每次操作 ...
- SpringTask
SpringTask是spring提供的一个任务调度工具,按照约定的时间自动执行代码逻辑 定时任务框架,即定时自动执行某段代码 应用场景:信用卡每月还款提醒,火车售票系统处理未支付订单 cron表达式 ...
- 轻量级SpringBoot Office文档在线预览框架
框架简介 介绍:基于开源项目KkFileView源码提取出,封装成仅用于 Office文档预览(格式转换) 功能的一个通用组件; 原理是把Word转成PDF,PPT转成PDF,Excel转成HTML; ...
- os.popen(cmd) 与 os.system(cmd) 的区别
os.popen(cmd) 与 os.system(cmd) 的区别 1,os.popen(cmd) 不会直接返回任何数据,os.system(cmd) 会直接输出结果(返回的却是int状态码) 2, ...
- 【CentOS】 8版本 Cannot update read-only repo 问题
GUI界面应用市场无法访问 https://blog.csdn.net/hm0406120201/article/details/104553205/
- 很好用的python游戏环境(续2):强化学习算法走迷宫游戏环境(导航问题 navigation):分享一个python语言的迷宫游戏环境
相关前文: 很好用的python游戏环境(续):强化学习算法走迷宫游戏环境(导航问题 navigation):分享一个python语言的迷宫游戏环境 项目的GitHub地址: https://gith ...
- 《Python数据可视化之matplotlib实践》 源码 第二篇 精进 第七章
图 7.1 import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np mpl.rcParams[& ...