社区讨论
WAon test 2# 求调
CF2145CMonocarp's String参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mj5gras3
- 此快照首次捕获于
- 2025/12/14 16:29 2 个月前
- 此快照最后确认于
- 2025/12/17 17:30 2 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define db double
#define sz(x) ((int)x.size())
#define inf (1 << 30)
#define pb push_back
typedef pair<int, int> PII;
const int N = 2e5 + 7;
const int P = 998244353;
int read() {
int x = 0, f = 1;
char ch = getchar();
while (!(ch >= '0' && ch <= '9')) {if (ch == '-') f = -f;ch = getchar();}
while (ch >= '0' && ch <= '9') {x = x * 10 + ch - '0';ch = getchar();}
return x * f;
}
char s[N];
int sum[N], suf[N], n;
void solve() {
map <int, set<int> > mp;
mp.clear();
// n = read();
scanf("%d%s", &n, s + 1);
for (int i = 1; i <= n; i++) {
sum[i] = sum[i - 1] + (s[i] == 'a' ? 1 : -1);
}
for (int i = n; i >= 1; i--) {
suf[i] = suf[i + 1] + (s[i] == 'a' ? 1 : -1);
mp[suf[i]].insert(i);
}
if(suf[1] == 0){
printf("%d\n", 0);
return;
}
// for (int i = 1; i <= n; i++) {
// printf("%d : %d\n", suf[i], sum[i]);
// }
// mp[0].insert(n + 1);
int ans = n;
for (int i = 0; i <= n; i++) {
auto p = mp[-sum[i]].upper_bound(i);
if (p != mp[-sum[i]].end()) {
int x = *p;
ans = min(ans, x - i - 1);
}
}
printf("%d\n", ans == n ? -1 : ans);
}
int main() {
int T;
scanf("%d", &T);
while (T--) solve();
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...