Submission #1137970

#TimeUsernameProblemLanguageResultExecution timeMemory
1137970VMaksimoski008JJOOII 2 (JOI20_ho_t2)C++20
100 / 100
25 ms12360 KiB
#include <bits/stdc++.h> #define ar array //#define int long long using namespace std; using ll = long long; using pii = pair<int, int>; using pll = pair<ll, ll>; const int mod = 1e9 + 7; const int LOG = 20; const int maxn = 2e5 + 5; int get(char ch) { if(ch == 'J') return 0; if(ch == 'O') return 1; return 2; } int vis[maxn][4], ans=1e9; vector<int> G[maxn]; void dfs(int u, int t, int l) { if(vis[u][t]) return ; if(t == 3) { ans = min(ans, u-l+1); return ; } for(int v : G[u]) dfs(v, t+1, l); } signed main() { int n, k; cin >> n >> k; string s; cin >> s; s = "." + s; vector<int> pos[3]; for(int i=1; i<=n; i++) pos[get(s[i])].push_back(i); for(int i=0; i<3; i++) { if(pos[i].size() < k) { cout << -1 << '\n'; return 0; } } for(int i=0; i+k-1<pos[2].size(); i++) { G[pos[2][i]].push_back(pos[2][i+k-1]); } for(int t=0; t<2; t++) { for(int i=0; i+k-1<pos[t].size(); i++) { auto p = lower_bound(pos[t+1].begin(), pos[t+1].end(), pos[t][i+k-1]); if(p != pos[t+1].end()) { G[pos[t][i]].push_back(*p); } } } for(int i=1; i<=n; i++) { if(s[i] == 'J' && !vis[i][0]) dfs(i, 0, i); } cout << (ans == 1e9 ? -1 : ans - 3*k) << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...