这道题我觉得并不难,AC代码也不长,枚举反转区间长度k即可(bushi
我的代码(微调防chao版)
#include <bits/stdc++.h>
#include <iostream>
#define ll long long
using namespace std;
int n;
int f[1006],dir[1006];
char t;
int solve(int k){
memset(f,0,sizeof(f));
int sum = 0,res = 0;
for(int i = 0; i + k <= n; i++){
if((di[i] + sum) % 2 == 1){
f[i] = 1;
res++;
}
sum += f[i];
if(i - k + 1 >= 0) sum -= f[i - k + 1];
}
for(int i = n - k + 1; i < n; i++){
if((dir[i] + sum) % 2 == 1) return -1;
if(i - k + 1 >= 0) sum -= f[i - k + 1];
}
return res;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for(int i = 0;i < n; i++){
cin >> t;
if(t == 'B') dir[i] = 1;
}
int mink = 1, minans = n;
for(int k = 1; k <= n; k++){
int res = solve(k);
if(res >= 0 && res < minans){
minans = res;
mink = k;
}
}
cout << mink << " " << minans << '\n';
我觉得达不到蓝题标准