题解:CF1955E Long Inversions
显然的,遇到一个
然后对于翻转,实际上就是将区间
然后枚举
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int T;
int n;
char s[5010];
int sum[5010];
int main() {
scanf("%d", &T);
while (T--) {
scanf("%d", &n);
scanf("%s", s + 1);
for (int k = n; k >= 1; --k) {
for (int i = 0; i <= n; ++i) sum[i] = 0;
for (int i = 1; i <= n - k + 1; ++i) {
int t = s[i] - '0';
sum[i] += sum[i - 1];
if (!((t + sum[i]) & 1)) {
++sum[i];
--sum[i + k];
}
}
for (int i = n - k + 2; i <= n; ++i) sum[i] += sum[i - 1];
bool ok = true;
for (int i = 1; i <= n; ++i) {
int t = s[i] - '0';
if (!((t + sum[i]) & 1)) {
ok = false;
break;
}
}
if (ok) {
printf("%d\n", k);
break;
}
}
}
return 0;
}