#include<bits/stdc++.h>
using namespace std;
void solve(){
int n, k, t;
cin >> n >> k >> t;
string s;
cin >> s;
vector<int> a(n+1, 0), b(n+1, 0), c(n+1, 0);
for(int i=1; i<=n; i++){
a[i]+=a[i-1];
b[i]+=b[i-1];
c[i]+=c[i-1];
if(s[i-1]=='1') a[i]++;
if(s[i-1]=='2') b[i]++;
if(s[i-1]=='3') c[i]++;
}
int spotkania = a[n]+b[n];
int trzeba = spotkania - k;
trzeba = max(trzeba, 0);
int best = -1;
if(trzeba <= b[n]){
cout << n - trzeba<<"\n";
return;
}
for(int l = t+1; l+t <= n; l++){
for(int r = l; r+t<=n; r++){
int biuro = a[r] + b[r] -a[l-1] - b[l-1];
int zdalne = b[n] - b[r+t] + b[l-t-1];
int wolne = c[n] - c[r+t] + c[l-t-1] + a[n] - a[r+t] + a[l-t-1];
if(biuro + zdalne >= trzeba){
int nadwyzka = min(zdalne, biuro + zdalne - trzeba);
best = max(best, nadwyzka + wolne);
}
}
}
cout << best<<"\n";
}
int main(){
ios_base::sync_with_stdio(0);
solve();
}
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 | #include<bits/stdc++.h> using namespace std; void solve(){ int n, k, t; cin >> n >> k >> t; string s; cin >> s; vector<int> a(n+1, 0), b(n+1, 0), c(n+1, 0); for(int i=1; i<=n; i++){ a[i]+=a[i-1]; b[i]+=b[i-1]; c[i]+=c[i-1]; if(s[i-1]=='1') a[i]++; if(s[i-1]=='2') b[i]++; if(s[i-1]=='3') c[i]++; } int spotkania = a[n]+b[n]; int trzeba = spotkania - k; trzeba = max(trzeba, 0); int best = -1; if(trzeba <= b[n]){ cout << n - trzeba<<"\n"; return; } for(int l = t+1; l+t <= n; l++){ for(int r = l; r+t<=n; r++){ int biuro = a[r] + b[r] -a[l-1] - b[l-1]; int zdalne = b[n] - b[r+t] + b[l-t-1]; int wolne = c[n] - c[r+t] + c[l-t-1] + a[n] - a[r+t] + a[l-t-1]; if(biuro + zdalne >= trzeba){ int nadwyzka = min(zdalne, biuro + zdalne - trzeba); best = max(best, nadwyzka + wolne); } } } cout << best<<"\n"; } int main(){ ios_base::sync_with_stdio(0); solve(); } |
English