#include <bits/stdc++.h>
using namespace std;
const int mn = 8003;
int n,k,t;
char tab[mn];
int zdalpref[mn], biurpref[mn], nicpref[mn];
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>n>>k>>t;
for (int i = 1; i <= n; i++){
cin>>tab[i];
biurpref[i] = (tab[i] == '1');
zdalpref[i] = (tab[i] == '2');
nicpref[i] = (tab[i] == '3');
biurpref[i] += biurpref[i-1];
zdalpref[i] += zdalpref[i-1];
nicpref[i] += nicpref[i-1];
}
int wyn = -1;
if (biurpref[n] <= k) wyn = nicpref[n] + min(k, zdalpref[n]+biurpref[n]);
for (int i = 1; i <= n-2*t+1; i++){
for (int j = i+t; j <= n-t+1; j++){
int newk = k;
newk -= biurpref[i+t-1] - biurpref[i-1];
newk -= zdalpref[i+t-1] - zdalpref[i-1];
newk -= biurpref[j+t-1] - biurpref[j-1];
newk -= zdalpref[j+t-1] - zdalpref[j-1];
if (newk < biurpref[i-1]+biurpref[n]-biurpref[j+t-1]) continue;
// cout<<i<<" "<<j<<" "<<newk<<" "<<min(zdalpref[i-1]+zdalpref[n]-zdalpref[j+t-1], newk) + nicpref[i-1] + nicpref[n] - nicpref[j+t-1]<<"\n";
wyn = max(wyn, min(zdalpref[i-1]+zdalpref[n]-zdalpref[j+t-1]+biurpref[i-1]+biurpref[n]-biurpref[j+t-1], newk) + nicpref[i-1] + nicpref[n] - nicpref[j+t-1]);
}
}
cout<<wyn<<"\n";
}
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 | #include <bits/stdc++.h> using namespace std; const int mn = 8003; int n,k,t; char tab[mn]; int zdalpref[mn], biurpref[mn], nicpref[mn]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>k>>t; for (int i = 1; i <= n; i++){ cin>>tab[i]; biurpref[i] = (tab[i] == '1'); zdalpref[i] = (tab[i] == '2'); nicpref[i] = (tab[i] == '3'); biurpref[i] += biurpref[i-1]; zdalpref[i] += zdalpref[i-1]; nicpref[i] += nicpref[i-1]; } int wyn = -1; if (biurpref[n] <= k) wyn = nicpref[n] + min(k, zdalpref[n]+biurpref[n]); for (int i = 1; i <= n-2*t+1; i++){ for (int j = i+t; j <= n-t+1; j++){ int newk = k; newk -= biurpref[i+t-1] - biurpref[i-1]; newk -= zdalpref[i+t-1] - zdalpref[i-1]; newk -= biurpref[j+t-1] - biurpref[j-1]; newk -= zdalpref[j+t-1] - zdalpref[j-1]; if (newk < biurpref[i-1]+biurpref[n]-biurpref[j+t-1]) continue; // cout<<i<<" "<<j<<" "<<newk<<" "<<min(zdalpref[i-1]+zdalpref[n]-zdalpref[j+t-1], newk) + nicpref[i-1] + nicpref[n] - nicpref[j+t-1]<<"\n"; wyn = max(wyn, min(zdalpref[i-1]+zdalpref[n]-zdalpref[j+t-1]+biurpref[i-1]+biurpref[n]-biurpref[j+t-1], newk) + nicpref[i-1] + nicpref[n] - nicpref[j+t-1]); } } cout<<wyn<<"\n"; } |
English