CF 1196D2 RGB Substring (hard version) --- 前缀和 + 思维

简单的情况不用前缀和,直接暴力就好,数据范围大的D2,就用前缀和数组存不满足三种情况的数,最后减一下取小就可以。

 1 #include<bits/stdc++.h> 
 2 #define mem(a) memset(a,0,sizeof(a))
 3 #define ll long long
 4 #define ld long double
 5 #define ull unsigned long long
 6 #define mp make_pair
 7 #define pb push_back
 8 #define inf 0x3f3f3f3f
 9 using namespace std;
10 const int N=2e5+5;
11 const int M=100+5;
12 int n,t,k,x[N],y[N],z[N];
13 string s;
14 char ss[3]={'R','G','B'};
15 int main()
16 {
17     cin>>t;
18     while(t--)
19     {
20         cin>>n>>k;
21         cin>>s;
22         int ans=n+5;
23         x[0]=y[0]=z[0]=0;
24         for(int i=0;i<n;i++)
25         {
26             if(s[i]!=ss[i%3]) x[i+1]=x[i]+1;
27             else x[i+1]=x[i];
28             if(s[i]!=ss[(i+1)%3]) y[i+1]=y[i]+1;
29             else y[i+1]=y[i];
30             if(s[i]!=ss[(i+2)%3]) z[i+1]=z[i]+1;
31             else z[i+1]=z[i];
32         }
33         for(int i=0;i+k<=n;i++)
34         {
35             ans=min(min(ans,x[i+k]-x[i]),min(y[i+k]-y[i],z[i+k]-z[i]));
36         }
37         cout<<ans<<endl;
38     }
39 }
(ง •_•)ง

 

posted @ 2019-07-29 16:01  XXrl  阅读(197)  评论(0编辑  收藏  举报