Submission #1284100

#TimeUsernameProblemLanguageResultExecution timeMemory
1284100Faisal_SaqibJJOOII 2 (JOI20_ho_t2)C++20
100 / 100
64 ms2276 KiB
/* VENI VIDI VICI */ // #pragma GCC optimize("Ofast","unroll-all-loops","fast-math","no-stack-protector","give-no-fuck") #include <bits/stdc++.h> // #include <iostream> // #include <vector> // #include <algorithm> // #include <set> // #include <map> using namespace std; #define fi first #define se second #define pb push_back #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() #define rep(i,x, n) for (int i = (x); i < (n); ++i) #define repr(i,x, n) for (int i = (n) - 1; i >= (x); --i) mt19937 RNG(chrono::steady_clock::now().time_since_epoch().count()); // #define sum accumulate //using i128 = __int128; using ll = long long; using ull = unsigned long long; using ld = long double; using str = string; using pi = pair<int, int>; using pl = pair<ll, ll>; using vi = vector<int>; using vl = vector<ll>; using vpi = vector<pair<int, int>>; using vvi = vector<vi>; using sll = set<ll>; template<class T> istream& operator>>(istream& is, vector<T>& v) { for(auto &i:v) is>>i; return is; } template<class T1,class T2> istream& operator>>(istream& is, pair<T1,T2>& p) { is>>p.fi>>p.se; return is; } template<class T> ostream& operator<<(ostream& os, const vector<T>& v) { for(const auto &i:v) os<<i<<' '; return os; } template<class T1,class T2> ostream& operator<<(ostream& os, const pair<T1,T2>& p) { os<<p.fi<<' '<<p.se; return os; } void pyn(bool x) { cout<<(x?"YES":"NO")<<endl; } void pYN(bool x) { cout<<(x?"Yes":"No")<<endl; } void pAB(bool x) { cout<<(x?"Alice":"Bob")<<endl; } ll powmod(ll a,ll b,ll modulo) { if(b==0){ return 1; } ll temp=powmod(a,b/2,modulo); if(b%2==0){ return (temp*temp)%modulo; } else{ return (a*((temp*temp)%modulo))%modulo; } } bool Prime(ll n){ for (ll i = 2; i*i <= n; i++) if (n % i == 0) return false; return (n>1); } void readIO() { freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); } void solve(); int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); // readIO(); int uwu=1; // cin>>uwu; for(int tc=1;tc<=uwu;tc++) { // cout<<"Case #"<<tc<<": "; solve(); } return 0; } void solve() { ll n,k; cin>>n>>k; string s; cin>>s; map<char,deque<ll>> oc; { int i=0; for(char c:{'J','O','I'}) { int cp=k; while(i<n and cp>0) { cp-=(s[i]==c); i++; } if(cp>0) { cout<<-1<<endl; return; } } } // ll ans=n-3*k; ll r=0; auto check=[&](){ int as=-1; // cout<<"CHECK"<<endl; for(auto c:{'J','O','I'}) { auto it=upper_bound(all(oc[c]),as); // we can take it if(k-1>=end(oc[c])-it) { return false; } as=*(it+k-1); // cout<<c<<' '<<as<<endl; // k-1 < end(oc[c])-it } return true; }; ll ans=n; for(int l=0;l<n;l++) { while(r<n and !check()) { // cout<<"FOR "<<l<<' '<<r<<' '<<check()<<endl; oc[s[r]].push_back(r); r++; } if(check()) { // cout<<"Range "<<l<<' '<<r<<endl; ans=min(ans,r-l); } else { break; } oc[s[l]].pop_front(); } cout<<ans-3*k<<endl; // for(int i=0;i+k-1<oc['O'].size();i++) // { // auto it=upper_bound(all(oc['J']),oc['O'][i]); // // int cntj=it-begin(oc['J']); // auto it1=upper_bound(all(oc['I']),oc['O'][i+k-1]); // // int cnti=oc['I'].size()-(it-begin(oc['I'])); // if(it-begin(oc['J'])>=k and it1-end(oc['I'])<1-k) // { // // it-k >= begin(oc['J']) // // it1-end(oc['J']) < 1-k // int l=*(it-k); // int r=*(it1+k-1); // ans=min(ans,r-l+1-3*k); // } // } // cout<<ans<<endl; }

Compilation message (stderr)

ho_t2.cpp: In function 'void readIO()':
ho_t2.cpp:90:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   90 |     freopen("input.txt", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
ho_t2.cpp:91:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   91 |     freopen("output.txt", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...