#include <iostream>
using namespace std;
int result(int budget, int work, int zoom, int free) {
budget -= work;
if (budget < 0) return -1;
int skippaple = min(budget, zoom);
return (skippaple + work + free);
}
int pref[3][8080];
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, k, t;
cin >> n >> k >> t;
string s;
cin >> s;
for(int i = 1; i <= n; i++) {
if (s[i - 1] == '1') pref[0][i] = 1;
else if (s[i - 1] == '2') pref[1][i] = 1;
else if (s[i - 1] == '3') pref[2][i] = 1;
pref[0][i] = pref[0][i] + pref[0][i - 1];
pref[1][i] = pref[1][i] + pref[1][i - 1];
pref[2][i] = pref[2][i] + pref[2][i - 1];
}
int res = -1;
res = max(res, result(k, pref[0][n], pref[1][n], pref[2][n]));
//cout << k << " " << pref[0][n] << " " << pref[1][n] << " " << pref[2][n] << " " << result(k, pref[0][n], pref[1][n], pref[2][n]) << "\n";
for(int i = t + 1; i <= n; i++) {
for(int j = i; j + t <= n; j++) {
int budget = k;
budget -= pref[0][i - 1] - pref[0][i - t - 1];
budget -= pref[1][i - 1] - pref[1][i - t - 1];
budget -= pref[0][j + t] - pref[0][j];
budget -= pref[1][j + t] - pref[1][j];
int work = pref[0][i - t - 1] + pref[0][n] - pref[0][j + t];
int zoom = pref[1][i - t - 1] + pref[1][n] - pref[1][j + t];
int free = pref[2][i - t - 1] + pref[2][n] - pref[2][j + t];
res = max(res, result(budget, work, zoom, free));
//cout << i << " " << j << " " << budget << " " << work << " " << zoom << " " << free << " " << result(budget, work, zoom, free) << "\n";
}
}
cout << res << "\n";
return 0;
}
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 | #include <iostream> using namespace std; int result(int budget, int work, int zoom, int free) { budget -= work; if (budget < 0) return -1; int skippaple = min(budget, zoom); return (skippaple + work + free); } int pref[3][8080]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n, k, t; cin >> n >> k >> t; string s; cin >> s; for(int i = 1; i <= n; i++) { if (s[i - 1] == '1') pref[0][i] = 1; else if (s[i - 1] == '2') pref[1][i] = 1; else if (s[i - 1] == '3') pref[2][i] = 1; pref[0][i] = pref[0][i] + pref[0][i - 1]; pref[1][i] = pref[1][i] + pref[1][i - 1]; pref[2][i] = pref[2][i] + pref[2][i - 1]; } int res = -1; res = max(res, result(k, pref[0][n], pref[1][n], pref[2][n])); //cout << k << " " << pref[0][n] << " " << pref[1][n] << " " << pref[2][n] << " " << result(k, pref[0][n], pref[1][n], pref[2][n]) << "\n"; for(int i = t + 1; i <= n; i++) { for(int j = i; j + t <= n; j++) { int budget = k; budget -= pref[0][i - 1] - pref[0][i - t - 1]; budget -= pref[1][i - 1] - pref[1][i - t - 1]; budget -= pref[0][j + t] - pref[0][j]; budget -= pref[1][j + t] - pref[1][j]; int work = pref[0][i - t - 1] + pref[0][n] - pref[0][j + t]; int zoom = pref[1][i - t - 1] + pref[1][n] - pref[1][j + t]; int free = pref[2][i - t - 1] + pref[2][n] - pref[2][j + t]; res = max(res, result(budget, work, zoom, free)); //cout << i << " " << j << " " << budget << " " << work << " " << zoom << " " << free << " " << result(budget, work, zoom, free) << "\n"; } } cout << res << "\n"; return 0; } |
English