#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; } |
English