Submission #1347693

#TimeUsernameProblemLanguageResultExecution timeMemory
1347693top1svtinJOIOJI (JOI14_joioji)C++17
In queue
0 ms0 KiB
#include <bits/stdc++.h>

using namespace std;

#define kien long long
#define FOR(i, a, b) for (int i = a;i <= b; i++)
#define FORD(i, a, b) for (int i = a;i >= b; i--)
#define pb push_back
#define pii pair <int, int>
const int MXN = 2e5 + 5;
kien ans, n, pi[MXN], pj[MXN], po[MXN];
kien dp[MXN], dp1[MXN];
map <pii, int> pp;


main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    string s; cin >> s;
    FOR (i, 0, s.size() - 1) {
        if (i >= 1)
        pi[i] = pi[i - 1],  pj[i] = pj[i - 1], po[i] = po[i - 1];
        if (s[i] == 'J') pj[i]++;
        else if (s[i] == 'O') po[i]++;
        else if (s[i] == 'I') pi[i]++;
        dp[i] = abs(pi[i] - po[i]);
        dp1[i] = abs(pj[i] - po[i]);
    }

    FOR (i, 0, s.size() - 1) {
        int kk = pp[{dp[i], dp1[i]}];
        if (kk != 0) {
            ans = max(ans, 1LL * (i - kk));
        }
        else
            pp[{dp[i], dp1[i]}] = i;
    }

    cout << ans;
}