题目链接:D. Black and White Stripe
题意:找到连续k个B,可以将W翻转为B,找出最小的翻转次数
题解:通过前缀和计算出区间所需要的翻转次数,并找出最小的翻转次数
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e6 + 5;
const int mod = 1e9 + 7;
#define pai acos(-1)
int b[maxn],c[maxn];
int book[maxn] = {0};
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
//t = 1;
//deque<int>q;
cin >> t;
while (t--) {
int n;
cin >> n;
int k;
cin>>k;
string a;
cin>>a;
int l=0,r=0,sum=0,s=0,mx=0x7ffffffff,g=1;
for(int i=0;i<a.size();i++)
{
if(a[i]!='B')
{
b[i]=1;
}
else b[i]=0;
c[i+1]=0;
}
c[0]=0;
for(int i=1;i<=a.size();i++)
c[i]+=c[i-1]+b[i-1];
for(int i=1;i+k-1<=a.size();i++)
{
mx=min(mx,c[i+k-1]-c[i-1]);
}
cout<<mx<<endl;
}
return 0;
}
/**
* ┏┓ ┏┓+ +
* ┏┛┻━━━┛┻┓ + +
* ┃ ┃
* ┃ ━ ┃ ++ + + +
* ████━████+
* ◥██◤ ◥██◤ +
* ┃ ┻ ┃
* ┃ ┃ + +
* ┗━┓ ┏━┛
* ┃ ┃ + + + +Code is far away from
* ┃ ┃ + bug with the animal protecting
* ┃ ┗━━━┓ 神兽保佑,代码无bug
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━┳┓┏┛ + + + +
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛+ + + +
*/