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