제출 #1317163

#제출 시각아이디문제언어결과실행 시간메모리
1317163quanduongxuan12JJOOII 2 (JOI20_ho_t2)C++20
100 / 100
24 ms3748 KiB
#include <bits/stdc++.h> using namespace std; #define name "ojuz" #define MAXN 200005 #define pb push_back #define pf push_front #define ll long long #define ii pair<int, int> #define fs first #define sc second #define ill pair<int, ll> #define lli pair<ll, int> #define llll pair<ll, ll> #define all(v) v.begin(),v.end() #define uni(v) v.erase(unique(all(v)),v.end()) #define bit(n,i) (((n)>>(i))&1) #define FOR(i,a,b) for (int i=(a),_b=(b); i<=_b; i++) #define FORD(i,a,b) for (int i=(a),_b=(b); i>=_b; i--) #define MASK(i) (1LL<<(i)) const int INF=1e9; const int MOD=1e9+7; void add(int &u, int v){ u+=v; if (u>=MOD) u-=MOD; } void sub(int &u, int v){ u-=v; if (u<0) u+=MOD; } void minimize(int &u, int v){ u=min(u,v); } void maximize(int &u, int v){ u=max(u,v); } long long Rand(long long l, long long r){ ll tmp=0; FOR(i,1,4) tmp=((tmp<<15)^(((1<<15)-1)&rand())); return l+tmp%(r-l+1); } int n,k; char s[MAXN]; int a[MAXN]; int cnt[3][MAXN]; int get(int c, int l, int r){ return cnt[c][r]-cnt[c][l-1]; } int main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); cin>>n>>k; FOR(i,1,n) cin>>s[i]; FOR(i,1,n){ if (s[i]=='J') a[i]=0; else if (s[i]=='O') a[i]=1; else a[i]=2; } FOR(i,1,n){ FOR(j,0,2) cnt[j][i]=cnt[j][i-1]; cnt[a[i]][i]++; } int ans=INF; int j=1; FOR(i,1,n){ if (cnt[1][i]<k) continue; while (cnt[1][i]-cnt[1][j]>=k) ++j; int res_A=-1,res_B=-1; int l=1,r=j-1; while (l<=r){ int mid=(l+r)/2; if (get(0,mid,j-1)>=k){ l=mid+1; res_A=mid; } else r=mid-1; } l=i+1,r=n; while (l<=r){ int mid=(l+r)/2; if (get(2,i+1,mid)>=k){ r=mid-1; res_B=mid; } else l=mid+1; } if (res_A==-1||res_B==-1) continue; int len=res_B-res_A+1-3*k; minimize(ans,len); } cout<<(ans==INF?-1:ans); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...