可惜没如果=_=
时光的河入海流

题目链接在这里:Problem - B - Codeforces

尺取法一般用于一个数列中的连续子列的问题,思路有点类似于莫队,是一个很巧妙的算法

 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 const int MAX=1e5+5;
 4 int n,k,ans;
 5 char s[MAX];
 6 int main(){
 7     freopen ("b.in","r",stdin);
 8     freopen ("b.out","w",stdout);
 9     int i,j;
10     scanf("%d%d\n%s",&n,&k,s+1);
11     int low,high,le1,le2;
12     low=high=1;le1=le2=0;ans=0;
13     while (low<=high && high<=n){
14         if (s[high]=='b'){
15             le2++;
16             if (le2>k){
17                 while (s[low]=='a' && low<=high) low++; low++;
18                 le2--;
19             }
20         }
21         ans=max(ans,high-low+1);
22         //cout<<low<<' '<<high<<' '<<ans<<endl;
23         high++;
24     }
25     low=high=1;
26     while (low<=high && high<=n){
27         if (s[high]=='a'){
28             le1++;
29             if (le1>k){
30                 while (s[low]=='b' && low<=high) low++; low++;
31                 le1--;
32             }
33         }
34         ans=max(ans,high-low+1);
35         //cout<<low<<' '<<high<<' '<<ans<<endl;
36         high++;
37     }
38     
39     printf("%d",ans);
40     return 0;
41 }

 

posted on 2021-07-22 22:10  珍珠鸟  阅读(28)  评论(0编辑  收藏  举报