map<int, set<int>> mp; int pre = 0; for (int i = 0; i < n; i++) { char c; cin >> c; a[i] = (c == 'a' ? 1 : -1); pre += a[i]; mp[pre].insert(i + 1); }
int tot = pre;
int suf = 0; int res = 1'000'000'000; if (mp[-suf].size()) { res = min(res, n - *mp[-suf].rbegin()); } mp[0].insert(0); for (int i = n - 1; i >= 0; i--) { mp[pre].erase(i + 1); pre -= a[i]; suf += a[i]; if (mp[-suf].size()) { res = min(res, i - *mp[-suf].rbegin()); } } cout << (res == 1'000'000'000 ? -1 : res) << endl; }
#include<bits/stdc++.h> usingnamespace std; using ll = longlong; using ull = unsignedlonglong;
voidsolve(){ constint N = 30; int K = N * (N - 1) / 2; vector<pair<int, int>> w; w.push_back({0, 0}); for (int n = 1; n <= N; n++) { int k = n * (n - 1) / 2; for (int _ = n; _ <= N; _ += n) { w.push_back({n, k}); } } int M = w.size() - 1;
vector dp(M + 1, vector(N + 1, vector<int>(K + 1))); vector lst(M + 1, vector(N + 1, vector<pair<int, int>>(K + 1, {-1, -1}))); dp[0][0][0] = 1; for (int m = 1; m <= M; m++) { auto [wn, wk] = w[m]; for (int n = 0; n <= N; n++) { for (int k = 0; k <= K; k++) { dp[m][n][k] = dp[m - 1][n][k]; lst[m][n][k] = {n, k}; if (n >= wn && k >= wk && dp[m - 1][n - wn][k - wk]) { dp[m][n][k] = 1; lst[m][n][k] = {n - wn, k - wk}; } } } }
for (int _ = (cin >> _, _); _--; ) { int N, K; cin >> N >> K; K = N * (N - 1) / 2 - K; if (dp[M][N][K] == 0) { cout << "0" << endl; continue; }
pair<int, int> cur = {N, K}; int num = N; for (int m = M; m > 0; m--) { auto [n, k] = cur; auto [nn, kk] = lst[m][n][k]; if (kk != k) { for (int k = 1; k <= w[m].first; k++) { cout << num - w[m].first + k << " "; } num -= w[m].first; } cur = {nn, kk}; } while (num > 0) { cout << num << " "; num--; } cout << endl; } }