博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 814C - An impassioned circulation of affection
阅读量:6199 次
发布时间:2019-06-21

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

原题链接:

题意:有长度为n的一个字符串,q个询问,每个询问由数字m和字符c组成,问最多在字符串中替换m个字符,使连续的字符c的长度最大,输出这个最大值。

 

思路:首先可以想到,替换两段分开的子串变成连续的字符c肯定不能得到最大值,所以替换的部分必须是连续的一个子串。那么我们可以对于a~z每个字符枚举字符区间[l,r],区间内可被替换的字符数m对应能得到r-l+1的连续字符长度,一边枚举一边更新最大值。这里我们要求得恰好能被替换成a~z字符的最大次数,当输入的m超过这个最大次数,输出字符串长度n。

 

AC代码:

#include
#include
#include
#include
using namespace std;int res[27][1505],num[27][1505];int maxx[27];int main(){ char str[1505]; int n,q; char ch; scanf("%d", &n); scanf("%s", str); memset(res, 0, sizeof(res)); memset(num, 0, sizeof(num)); memset(maxx, 0, sizeof(maxx)); for(int i=0;i<26;i++){ for(int j=1;j<=n;j++){ if(str[j-1]-'a'==i) num[i][j]=num[i][j-1]+1; else num[i][j]=num[i][j-1]; num[i][j-1]=j-1-num[i][j-1]; } num[i][n]=n-num[i][n]; } int x; for(int k=0;k<26;k++){ for(int r=1;r<=n;r++){ for(int l=r;l>0;l--){ x=num[k][r]-num[k][l-1]; res[k][x]=max(res[k][x], r-l+1); maxx[k]=max(maxx[k], x); } } } scanf("%d", &q); int num; for(int i=0;i

 

转载于:https://www.cnblogs.com/MasterSpark/p/7436294.html

你可能感兴趣的文章
【火炉炼AI】机器学习046-图像边缘的检测方法
查看>>
对称加密与非对称加密
查看>>
插件化 学习笔记
查看>>
产品经理与UI如何开展“高效”沟通?
查看>>
社区产品策划4元素:个人中心、内容、消息盒子、导航
查看>>
面试 7:快慢指针法玩转链表算法面试(一)
查看>>
「 iOS知识小集 」2018 · 第 20 期
查看>>
中间人攻击利用框架bettercap测试
查看>>
Spring Cloud Gateway 深入
查看>>
CSS Scroll Indicator —— 纯CSS 滚动指示器
查看>>
OpenGL ES 2 0 Making the Hardware Work for You
查看>>
快速简单的定制一个时间轴布局(LinearLayout)(2)
查看>>
leetcode系列 - Add Strings(Easy)
查看>>
Java Flight Recorder小试牛刀
查看>>
十、ListView 基本使用(一)
查看>>
Maven的profile文件过滤引起的字符编码BUG
查看>>
理解JVM(六):线程安全和锁优化
查看>>
牵引力就业部总监为你揭秘,IT行业面试几大技巧
查看>>
关闭 nginx 服务的正确姿势
查看>>
JVM(六)为什么新生代有两个Survivor分区?
查看>>