https://www.luogu.com.cn/problem/CF1196D2
前缀和
黄色题
思路:
看当前输入要被修改的这个字符串的第i位,是否与'R','G','B'三个中的一个相等,不相等的另外两个则增加一次修改次数 最后取以'RGB','GBR','BGR'中选其中一个开头的最小修改次数
#include<iostream> #include<cstring> using namespace std; const int M=2e5+10; char s[M]; int a[3][M]; int T,n,k,ans; int main() { cin>>T; while(T--) { a[0][0]=a[1][0]=a[2][0]=0; cin>>n>>k; cin>>s; ans=M; string t="RGB"; for(int i=0; i<n; i++) { for(int j=0;j<=2;j++){ if(s[i]!=t[(i+j)%3])a[j][i+1]=a[j][i]+1; else a[j][i+1]=a[j][i]; } }//a从下标为1的位开始&前缀和 for(int i=0; i+k<=n; i++) { for(int j=0;j<=2;j++){ ans=min(ans,a[j][i+k]-a[j][i]); } } //遍历求ans cout<<ans<<endl; } return 0; }
标签:int,hard,RGB,cin,Substring,CF1196D2,ans From: https://www.cnblogs.com/2elaina/p/16602954.html