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. C plus plus sprintf用法

    sprintf int sprintf ( char * str, const char * format, ... ); Write formatted data to string Compose ...

  2. java的构造方法 this 重载

    this1.隐含的局部变量在方法中指向调用该方法的对象()使用:当成员变量与局部变量同名的时候,通过this说明哪一个是成员变量.(this指向的是成员变量) 2.作为当前类的构造方法名存在作用:在构 ...

  3. HTTP协议 之 缓存

    转自:  http://www.cnblogs.com/TankXiao/archive/2012/11/28/2793365.html HTTP协议提供了非常强大的缓存机制, 了解这些缓存机制,对提 ...

  4. 416 Partition Equal Subset Sum 分割相同子集和

    详见:https://leetcode.com/problems/partition-equal-subset-sum/description/ C++: class Solution { publi ...

  5. Swift 基础语法入门(一)

    一.变量和常量 1.声明常量和变量 用let来声明常量  let radius = 10 用var来声明变量 var age = 20   或者是var x = 0.0, y = 0.0, z = 0 ...

  6. git + git flow 的简单介绍

    1.git简单实用 git:是一种分布式版本控制系统,因为其优秀的特性个人十分推崇. 1.1设置本机用户身份 git config -global user.name "userName&q ...

  7. nvm安装nodejs

    1. 安装nvm 下载 nvm-windows解压缩 nvm-windows解压缩 nvm-setup双击运行 nvm-setup.exe选择next选择 [D:\dev][path1] 或 默认路径 ...

  8. ES5之变量

    什么是变量:存放物体的一个容器,以便后续利用该容器存放的物体. 变量的声明及赋值: 声明变量关键字var; 变量名的规范:变量名由英文字母.数字.下划线.美元符号组成,但是首字母只能是英文字母.下划线 ...

  9. java visualVM 使用

    下载jdk 一般自带  jvisualvm.exe ,双击即可   下载地址   https://visualvm.github.io/pluginscenters.html 使用方法:

  10. vscode前端开发软件配搭好用的插件

    使用方法,可以在官网中搜索需要的插件或者在VsCode的“”扩展“”中搜索需要的插件添加方法使用Ctrl+P, 输入 ext install xxxx ,搜索要安装的插件,点击安装按钮即可(各取所需插 ...