博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
agc007F Shik and Copying String
阅读量:5930 次
发布时间:2019-06-19

本文共 1068 字,大约阅读时间需要 3 分钟。

题目链接

题意简述

xxx天时间复制字符串,有可能出错,出错就是复制上一次写过的那个字符。现在给出了原来的字符串和现在的字符串,求xxx最小是多少。

题解

显然对于一段相同而连续的字符,我们只需要关心一开始出现的那个位置。从上往下写出历史版本,用一条线连接连续相同字符一开始出现的位置,可以发现线经过的都是相同的字符。考虑线如何覆盖最优。显然线应该越低(或者说靠近原来的版本)越好。最低的位置应该是它后一个字符的线的位置+1+1+1。因此记个偏移量,再记个前缀和就可以解决了。

代码

#include 
#include
const int maxn=1000000;int n,ans,sum[maxn+10];char s[maxn+10],t[maxn+10];int main(){
scanf("%d%s%s",&n,s+1,t+1); if(s[1]!=t[1]) {
puts("-1"); return 0; } int f=0,k=0,now=n; for(int i=n; i; --i) {
f+=sum[i+k]; if((now>i)||(t[i]!=s[now])) {
while((now>0)&&((now>i)||(t[i]!=s[now]))) {
--now; } if(now==i) {
continue; } if(now<=0) {
puts("-1"); return 0; } ++k; ++f; sum[i+k-1]=0; --sum[now+k-1]; } ans=std::max(ans,f); } printf("%d\n",ans); return 0;}

转载于:https://www.cnblogs.com/Canopus-wym/p/10376101.html

你可能感兴趣的文章
EventBus3 0源码分析(二)post
查看>>
前端实现图片压缩上传
查看>>
Android 自定义View:深入理解自定义属性(七)
查看>>
WebPack持久缓存学习小结
查看>>
mysql基础
查看>>
微信小程序获取用户信息方法
查看>>
利用统计计算而不是计算机模拟解决样本容量问题
查看>>
前端的flutter之路(一):语法
查看>>
Vue+express+mongoDB实现个人博客系统
查看>>
HTTP - 发展历程
查看>>
【前端词典】提高幸福感的 9 个 CSS 技巧
查看>>
Python|拥有选择权,才拥有概率
查看>>
TS报错errorTS1086
查看>>
sprinboot 整合shiro后, aop不生效
查看>>
【鉴轻尘】漫长的熊市是彻底消亡的前兆,还是牛市一飞冲天的爆发?
查看>>
数据可视化学习之旅(一) React项目中初步使用Bizcharts
查看>>
spring boot 多模块项目整合 mybatis 时提示找到不 Mapper 的解决方案
查看>>
【从蛋壳到满天飞】JS 数据结构解析和算法实现-红黑树(一)
查看>>
SpringBoot,Vue前后端分离开发首秀
查看>>
centos7 redhat7以上版本gcc和gcc++ npm安装
查看>>