C. Vasya and String
time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

->  Link  <-

题目就不贴出来了,链接在上面;

题意:给定n,k,然后是一个长度为n的只含字母a、b的字符串,问至多改变k次使得一个子串字母都相同且长度最大,如所给样例:

input
10 1
bbabbabbba
output
6

这个字符串很明显将第二个a改为b,所以字串中字母相同且长度最大的就是6了;

那么怎么解决这个问题呢,①按照我们的思路当然是先找一个包含一种字母个数最多的字串,字串中另一种字母的个数不超过k,所以可以按这个思路去找;这是从个数多的字母出发,②那么我们也可以从个数少的字母出发,找一个字母个数不超过k的区间使其长度最大; 明白了吗,找k个是因为要改变k次,另一种不用变,我们只需找出符合条件且长度最大就行;

来看第二种思路代码:

const int N=100000+10;
int va[N],vb[N];//区间a、b的个数;
char a[N];
int main()
{
int n,k,i;
while(~scanf("%d%d",&n,&k))
{
memset(va,0,sizeof(va));
memset(vb,0,sizeof(vb));
scanf("%s",a);
for(i=0;i<n;i++)
{
if(a[i]=='a')
va[i]=va[i-1]+1,
vb[i]=vb[i-1];//将整个区间一种字母累加,方便求一个区间的这种字母个数;
else
vb[i]=vb[i-1]+1,
va[i]=va[i-1];
}
int max1=0,max2=0,j=0;
for(i=0;i<n;i++)//假设a为最长的;
{
while(vb[i]-vb[j-1]>k)//这时就需要改变b了,所以求一个区间b的个数不超过k;
{
j++;//当b的个数不超过k时区间长度就是i-j+1;
}
max1=max(max1,i-j+1);
}
j=0;//下面同上;
for(i=0;i<n;i++)//假设b为最长的;
{
while(va[i]-va[j-1]>k)//区间内a的个数不超过k;
{
j++;
}
max2=max(max2,i-j+1);
}
printf("%d\n",max(max1,max2));//再求出最长的字串;
}
return 0;
}

这种区间dp问题CF已经考过好几次了,上次有个题也是用的这种方法做出来的,所以感觉一种问题有好的思路就可以发散性的解决其他问题;

Codeforces Round #354 (Div. 2)-C. Vasya and String,区间dp问题,好几次cf都有这种题,看来的好好学学;的更多相关文章

  1. Codeforces Round #354 (Div. 2) C. Vasya and String 二分

    C. Vasya and String 题目连接: http://www.codeforces.com/contest/676/problem/C Description High school st ...

  2. Codeforces Round #354 (Div. 2)——C. Vasya and String(尺取)

    C. Vasya and String time limit per test 1 second memory limit per test 256 megabytes input standard ...

  3. Codeforces Round #354 (Div. 2) C. Vasya and String

    题目链接: http://codeforces.com/contest/676/problem/C 题解: 把连续的一段压缩成一个数,对新的数组求前缀和,用两个指针从左到右线性扫一遍. 一段值改变一部 ...

  4. Codeforces Round #538 (Div. 2) D. Flood Fill 【区间dp || LPS (最长回文序列)】

    任意门:http://codeforces.com/contest/1114/problem/D D. Flood Fill time limit per test 2 seconds memory ...

  5. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  6. 构造水题 Codeforces Round #206 (Div. 2) A. Vasya and Digital Root

    题目传送门 /* 构造水题:对于0的多个位数的NO,对于位数太大的在后面补0,在9×k的范围内的平均的原则 */ #include <cstdio> #include <algori ...

  7. Codeforces Round #184 (Div. 2) E. Playing with String(博弈)

    题目大意 两个人轮流在一个字符串上删掉一个字符,没有字符可删的人输掉游戏 删字符的规则如下: 1. 每次从一个字符串中选取一个字符,它是一个长度至少为 3 的奇回文串的中心 2. 删掉该字符,同时,他 ...

  8. Codeforces Round #297 (Div. 2)B. Pasha and String 前缀和

    Codeforces Round #297 (Div. 2)B. Pasha and String Time Limit: 2 Sec  Memory Limit: 256 MBSubmit: xxx ...

  9. 字符串处理 Codeforces Round #297 (Div. 2) B. Pasha and String

    题目传送门 /* 题意:给出m个位置,每次把[p,len-p+1]内的字符子串反转,输出最后的结果 字符串处理:朴素的方法超时,想到结果要么是反转要么没有反转,所以记录 每个转换的次数,把每次要反转的 ...

随机推荐

  1. 通过API文档查询Math类的方法,打印出近似圆,只要给定不同半径,圆的大小就会随之发生改变

    package question; import java.util.Scanner; import java.lang.Math; public class MathTest { /** * 未搞懂 ...

  2. 加密解密(3)Bob到CA申请证书过程

    网络安全中最知名的人物大概就是Bob和Alice了,因为很多安全原理阐述中都用这两个虚拟人物来进行实例说明. 我们来看看Bob是怎么从CA中心获得一个数字证书的: 1.Bob首先创建他自己的密钥对(k ...

  3. 423 Reconstruct Original Digits from English 从英文中重建数字

    给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字0-9.按升序输出原始的数字.注意:    输入只包含小写英文字母.    输入保证合法并可以转换为原始的数字,这意味着像 "ab ...

  4. hadoop-2.4.1集群搭建及zookeeper管理

    准备 1.1修改主机名,设置IP与主机名的映射 [root@xuegod74 ~]# vim /etc/hosts 192.168.1.73 xuegod73 192.168.1.74 xuegod7 ...

  5. 微信打开网址添加在浏览器中打开提示 http://caibaojian.com/weixin-tip.html

    原文链接:http://caibaojian.com/weixin-tip.html#t2 使用微信打开网址时,无法在微信内打开常用下载软件,手机APP等.网上流传的各种微信打开下载链接,微信已更新基 ...

  6. ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第四天(非原创)

    文章大纲 一.课程介绍二.今日内容介绍三.参考资料下载四.参考文章 一.课程介绍 一共14天课程(1)第一天:电商行业的背景.淘淘商城的介绍.搭建项目工程.Svn的使用.(2)第二天:框架的整合.后台 ...

  7. SELECT TOP 100 PERCENT * 的含义

    --返回符合条件的100%的记录,即所有符合条件的记录SELECT TOP 100 PERCENT * --返回符合条件的100条记录,即只返回符合条件的100条记录SELECT TOP 100 * ...

  8. 【PostgreSQL-9.6.3】一般视图

    PG视图分为两种,一种是物化视图,一种是一般视图.本篇文章主要写一般视图哪些事儿.所谓一般视图,通俗点说,就是由查询语句定义的虚拟表.视图中的数据可能来自一张或多张表. 1. 视图创建语句 CREAT ...

  9. js几个逻辑运算符的形象概括

    “&&”是逻辑与操作符,只有“&&”两边值同时满足(同时为真),整个表达式值才为真. b>a && b<c    //“&& ...

  10. updating error reports database解决方案

    Window--->Preferences--->General--->Startup and Shutdown--->取消勾选Eclipse Automated Error  ...