Submission #733497

#TimeUsernameProblemLanguageResultExecution timeMemory
733497pccJJOOII 2 (JOI20_ho_t2)C++14
100 / 100
11 ms3276 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pll pair<ll,ll> #define fs first #define sc second const int inf = 1e9; void solve(){ int n,k; cin>>n>>k; string s; cin>>s; deque<char> dq; for(auto &i:s)dq.push_back(i); while(!dq.empty()&&dq.front() != 'J')dq.pop_front(); while(!dq.empty()&&dq.back() != 'I')dq.pop_back(); n = dq.size(); int ans = inf; int jp[n+1] = {},ip[n+1] = {},op[n+1] = {}; int pref = 0; int p = 0; //for(auto &i:dq)cout<<i;cout<<endl; for(int i = 0;i<n;i++){ if(p<=i){ p = i+1; if(dq[i] == 'J')pref = 1; else pref = 0; } while(p<n&&pref<k){ if(dq[p] == 'J')pref++; p++; } if(pref<k)jp[i] = -1; else jp[i] = p; if(dq[i] == 'J')pref--; } pref = 0; p = 0; for(int i = 0;i<n;i++){ if(p<=i){ p = i+1; if(dq[i] == 'O')pref = 1; else pref = 0; } while(p<n&&pref<k){ if(dq[p] == 'O')pref++; p++; } if(pref<k)op[i] = -1; else op[i] = p; if(dq[i] == 'O')pref--; } pref = 0; p = 0; for(int i = 0;i<n;i++){ if(p<=i){ p = i+1; if(dq[i] == 'I')pref = 1; else pref = 0; } while(p<n&&pref<k){ if(dq[p] == 'I')pref++; p++; } if(pref<k)ip[i] = -1; else ip[i] = p; if(dq[i] == 'I')pref--; } for(int i = 0;i<n;i++){ int r = i; r = jp[r]; if(r == -1)continue; r = op[r]; if(r == -1)continue; r = ip[r]; if(r == -1)continue; ans = min(ans,r-i-k*3); } cout<<(ans == inf?-1:ans)<<'\n'; } int main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); int t= 1; while(t--)solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...