#include <bits/stdc++.h> #define int long long #define pii pair<int, int> #define piii pair<pair<int,int>, int> #define st first.first #define nd first.second #define rd second #define For(i, l, r) for (int i = l; i <= r; i++) #define Forcin(l, r, a) \ for (int i = l; i <= r; i++) \ cin >> a[i]; #define Ford(i, l, r) for (int i = l; i >= r; i--) #define ben(v) v.begin(), v.end() #define LOCAL 0 #define LOCAL2 0 using namespace std; const int M = 400005, inf=1e9; int n, sp, t, k, best=-1, meetings[M], zd_pref[M], st_pref[M], pot_pref[M], nec; signed main() { //cin.tie(0)->sync_with_stdio(); if (LOCAL) freopen("a.txt", "r", stdin); if (LOCAL2) freopen("local_out.txt", "w", stdout); cin>>n>>k>>t; For(i, 1, n){ st_pref[i]=st_pref[i-1]; pot_pref[i]=pot_pref[i-1]; zd_pref[i]=zd_pref[i-1]; char c; cin>>c; meetings[i]=c-'0'; if (c=='1'){ sp++; st_pref[i]++; } else if(c=='2'){ sp++; zd_pref[i]++; } else{ pot_pref[i]++; } } nec=max(0LL, sp-k); if (st_pref[n]<=k){ best = n-nec; } For(f, t+1, n){ For(l, f+1, n-t+1){ int spo=zd_pref[f-t-1]+(zd_pref[l-1]-zd_pref[f-1])+(zd_pref[n]-zd_pref[l+t-1])+(st_pref[l-1]-st_pref[f-1]); int pot=pot_pref[f-t-1]+(pot_pref[n]-pot_pref[l+t-1])+st_pref[f-t-1]+(st_pref[n]-st_pref[l+t-1]); if (spo > nec){ pot+=(spo-nec); spo=sp-k; } if (spo >= nec &&pot > best) best=pot; } } cout << best; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #include <bits/stdc++.h> #define int long long #define pii pair<int, int> #define piii pair<pair<int,int>, int> #define st first.first #define nd first.second #define rd second #define For(i, l, r) for (int i = l; i <= r; i++) #define Forcin(l, r, a) \ for (int i = l; i <= r; i++) \ cin >> a[i]; #define Ford(i, l, r) for (int i = l; i >= r; i--) #define ben(v) v.begin(), v.end() #define LOCAL 0 #define LOCAL2 0 using namespace std; const int M = 400005, inf=1e9; int n, sp, t, k, best=-1, meetings[M], zd_pref[M], st_pref[M], pot_pref[M], nec; signed main() { //cin.tie(0)->sync_with_stdio(); if (LOCAL) freopen("a.txt", "r", stdin); if (LOCAL2) freopen("local_out.txt", "w", stdout); cin>>n>>k>>t; For(i, 1, n){ st_pref[i]=st_pref[i-1]; pot_pref[i]=pot_pref[i-1]; zd_pref[i]=zd_pref[i-1]; char c; cin>>c; meetings[i]=c-'0'; if (c=='1'){ sp++; st_pref[i]++; } else if(c=='2'){ sp++; zd_pref[i]++; } else{ pot_pref[i]++; } } nec=max(0LL, sp-k); if (st_pref[n]<=k){ best = n-nec; } For(f, t+1, n){ For(l, f+1, n-t+1){ int spo=zd_pref[f-t-1]+(zd_pref[l-1]-zd_pref[f-1])+(zd_pref[n]-zd_pref[l+t-1])+(st_pref[l-1]-st_pref[f-1]); int pot=pot_pref[f-t-1]+(pot_pref[n]-pot_pref[l+t-1])+st_pref[f-t-1]+(st_pref[n]-st_pref[l+t-1]); if (spo > nec){ pot+=(spo-nec); spo=sp-k; } if (spo >= nec &&pot > best) best=pot; } } cout << best; } |