Submission #298118

#TimeUsernameProblemLanguageResultExecution timeMemory
298118eriksuenderhaufMonochrome Points (JOI20_monochrome)C++17
35 / 100
1685 ms4236 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 2e5 + 5; int a[2*N]; ll dp[N]; ll solve(int n, int i) { if (dp[i] != 0) return dp[i]; int ptr[2] = {i+n, i+n}, cnt[4] = {0, 0, 0, 0}; auto next = [&](int& j) { j = j+1 < 2*n ? j+1 : j+1-2*n; }; ll val = 0; for (int j = i, c = a[i]; j < i+n; c = a[++j]) { while (ptr[c] != i && a[ptr[c]] == c) cnt[c+2]++, next(ptr[c]); next(ptr[c]); val += min(cnt[c+2], cnt[c^1]) + cnt[c]++; } return dp[i] = val; } mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int get(int l, int r) { return uniform_int_distribution<int>(l, r)(rng); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n; cin >> n; string s; cin >> s; for (int i = 0; i < 2*n; i++) a[i] = s[i] == 'B'; ll ans = 0; for (int i = 0; i < 500; i++) ans = max(ans, solve(n, get(0, n-1))); cout << ans << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...