Submission #925453

#TimeUsernameProblemLanguageResultExecution timeMemory
925453XiaoyangJJOOII 2 (JOI20_ho_t2)C++17
100 / 100
26 ms5676 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define fi first #define se second #define pii pair<int,int> #define pll pair<long long,long long> #define pb push_back #define debug(x) cerr<<#x<<"="<<x<<endl #define pq priority_queue #define inf 1ll<<60 #define rep(i,a,b) for (ll i=a;i<(b);i++) #define MP make_pair #define SZ(x) (int(x.size())) #define mod 1000000007 #define ALL(x) x.begin(),x.end() #define endl "\n" void inc(ll &a,ll b) {a=(a+b)%mod;} void dec(ll &a,ll b) {a=(a-b+mod)%mod;} int prod(ll a,ll b) {return ll(a)*ll(b)%mod;} int lowbit(ll x) {return x&(-x);} ll p0w(ll base,ll p) {ll ret=1;while(p>0){if (p%2ll==1ll) ret=ret*base%mod;base=base*base%mod;p/=2ll;}return ret;} const ll maxn=222222; ll f[3][maxn]; signed main(){ ios::sync_with_stdio(0); cin.tie(0); ll n,k;cin>>n>>k; string s;cin>>s; s='0'+s; rep(i,1,n+1){ f[0][i]=f[0][i-1]; f[1][i]=f[1][i-1]; f[2][i]=f[2][i-1]; if(s[i]=='J')f[0][i]++; if(s[i]=='O')f[1][i]++; if(s[i]=='I')f[2][i]++; } ll ans=inf; rep(i,1,n+1){ ll a=lower_bound(f[0]+i,f[0]+n+1,f[0][i-1]+k)-f[0]; if(a>n)break; ll b=lower_bound(f[1]+a,f[1]+n+1,f[1][a-1]+k)-f[1]; if(b>n)break; ll c=lower_bound(f[2]+b,f[2]+n+1,f[2][b-1]+k)-f[2]; if(c>n)break; ans=min(ans,c-i+1-3*k); //find shortest substring with k of j,o and i in order } if(ans==inf)cout<<-1<<endl; else cout<<ans<<endl; return 0; } /* */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...