Submission #298397

#TimeUsernameProblemLanguageResultExecution timeMemory
298397eriksuenderhaufMonochrome Points (JOI20_monochrome)C++17
35 / 100
2081 ms8724 KiB
#pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #pragma GCC target("avx2") #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 2e5 + 5; int a[4*N], nxt[3*N][2]; ll solve(int n, int i) { int ptr[2] = {i+n, i+n}, cnt[4] = {0, 0, 0, 0}; ll val = 0; for (int j = i, c = a[i]; j < i+n; c = a[++j]) { cnt[c+2] += nxt[ptr[c]][c] - ptr[c]; ptr[c] = nxt[ptr[c]][c] + 1; val += min(cnt[c+2], cnt[c^1]) + cnt[c]++; } return val; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); auto cur_t = clock(); int n; cin >> n; string s; cin >> s; for (int i = 0; i < 2*n; i++) a[i] = a[i+2*n] = s[i] == 'B'; nxt[3*n][0] = nxt[3*n][1] = 3*n; for (int i = 3*n-1; i >= 0; i--) { nxt[i][0] = nxt[i+1][0], nxt[i][1] = nxt[i+1][1]; nxt[i][a[i]^1] = i; } ll ans = 0; int i = 0; // for (int i = 1; i < n; i++)// if (s[i] != s[i+n]) // ans = max(ans, solve(n, i)); while (i < n) { ans = max(ans, solve(n, i++)); while (i < n && s[i-1] != s[i+n-1]) i++; } cout << ans << "\n"; }

Compilation message (stderr)

monochrome.cpp: In function 'int main()':
monochrome.cpp:23:8: warning: unused variable 'cur_t' [-Wunused-variable]
   23 |   auto cur_t = clock();
      |        ^~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...