zoukankan      html  css  js  c++  java
  • Codeforces 676C Vasya and String(尺取法)

    题目大概说给一个由a和b组成的字符串,最多能改变其中的k个字符,问通过改变能得到的最长连续且相同的字符串是多长。

    用尺取法,改变成a和改变成b分别做一次:双指针i和j,j不停++,然后如果遇到需要改变且改变次数用完就让i++更正改变次数,最后更新答案。时间复杂度O(n)。

    另外,注意到k=0的情况。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 char str[111111];
     6 int main(){
     7     int n,k;
     8     scanf("%d%d%s",&n,&k,str);
     9     int i=0,j=0,tmpn=0,tmpk=0,ans=0;
    10     while(j<n){
    11         if(str[j]=='a'){
    12             ++tmpn;
    13         }else if(k==0){
    14             tmpn=0;
    15         }else{
    16             while(tmpk==k){
    17                 if(str[i]=='b'){
    18                     --tmpk;
    19                 }
    20                 --tmpn;
    21                 ++i;
    22             }
    23             ++tmpk;
    24             ++tmpn;
    25         }
    26         ans=max(ans,tmpn);
    27         ++j;
    28     }
    29     i=0; j=0; tmpn=0; tmpk=0;
    30     while(j<n){
    31         if(str[j]=='b'){
    32             ++tmpn;
    33         }else if(k==0){
    34             tmpn=0;
    35         }else{
    36             while(tmpk==k){
    37                 if(str[i]=='a'){
    38                     --tmpk;
    39                 }
    40                 --tmpn;
    41                 ++i;
    42             }
    43             ++tmpk;
    44             ++tmpn;
    45         }
    46         ans=max(ans,tmpn);
    47         ++j;
    48     }
    49     printf("%d",ans);
    50     return 0;
    51 }
  • 相关阅读:
    人月神话阅读笔记之二
    第二阶段:团队开发Fooks第三天
    第二阶段:团队开发Fooks第二天
    第二阶段:团队开发Fooks第一天
    第十三周进度总结
    人月神话阅读笔记之一
    第一阶段意见评论
    拓扑排序
    欧拉回路
    矩阵优化
  • 原文地址:https://www.cnblogs.com/WABoss/p/5666982.html
Copyright © 2011-2022 走看看