Submission #320623

#TimeUsernameProblemLanguageResultExecution timeMemory
320623teehandsomeJJOOII 2 (JOI20_ho_t2)C++11
100 / 100
11 ms2160 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define endl '\n' #define INF 1e9+7 #define all(x) x.begin(),x.end() using namespace std; using namespace __gnu_pbds; using ll=long long; using pii=pair<int,int>; using ppi=pair<int,pii>; using oset=tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>; template<typename T> void _print(vector<T> x) {for(auto e:x) cerr<<e<<",";} template<typename T> void _print(T x) {cerr<<x;} void dbg() {cerr<<endl;} template<typename Head,typename... Tail> void dbg(Head H,Tail... T) { _print(H); if(sizeof...(T)) cerr<<","; else cerr<<"\"]"; dbg(T...); } #define debug(...) cerr<<"["<<#__VA_ARGS__<<"]:[\"",dbg(__VA_ARGS__) int n,k; string s; int main () { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>k>>s; vector<int> J,O,I; for(int i=0;i<n;i++) { if(s[i]=='J') J.push_back(i); else if(s[i]=='O') O.push_back(i); else I.push_back(i); } int j_len=J.size(),o_len=O.size(),i_len=I.size(); if(j_len<k or o_len<k or i_len<k) { cout<<"-1"<<endl; return 0; } int ans=INF; //debug(J); debug(O); debug(I); for(int i=0;i<o_len-k+1;i++) { int first_O=O[i]; int last_O=O[i+k-1]; int pos1_I=lower_bound(all(I),last_O)-begin(I); if(I[pos1_I]<last_O or pos1_I+k>i_len) continue; int last_all=I[pos1_I+k-1]; int pos2_J=lower_bound(all(J),first_O)-begin(J)-1; if(pos2_J<k-1 or J[pos2_J]>first_O) continue; int first_all=J[pos2_J-k+1]; ans=min(ans,last_all-first_all-3*k+1); } if(ans==INF) cout<<"-1"<<endl; else cout<<ans<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...