#include <bits/stdc++.h>
#include <climits>
using namespace std;
const int MX = 8009;
int sum[MX][4];
int main(){
cin.tie(0)->sync_with_stdio(0);
int n, k, d, res = -1; cin >> n >> k >> d;
for(auto i = 1; i <= n; ++i){
char c; cin >> c;
for(auto j = 1; j <= 3; ++j) sum[i][j] = sum[i-1][j];
sum[i][c-'0']++;
}
for(auto i = 1; i <= n-2*d+1; ++i){
for(auto j = i+2*d-1; j <= n; ++j){
int skipped = sum[n][1];
skipped -= sum[j-d][1]-sum[i+d-1][1];
skipped += sum[j][2]+sum[i+d-1][2]-sum[j-d][2]-sum[i-1][2];
int taken = sum[n][3]+sum[n][1];
taken -= sum[j][3]+sum[j][1]-sum[i-1][3]-sum[i-1][1];
if(skipped > k) continue;
int bonus = sum[n][2];
bonus -= sum[j][2]-sum[i-1][2];
res = max(res, taken + min(bonus, k-skipped));
// cout << i << " " << j << " " << skipped << " " << taken << endl;
}
}
if(sum[n][1] <= k){
res = max(res, sum[n][3]+sum[n][1]+min(sum[n][2], k-sum[n][1]));
// cout << 0 << " " << 0 << sum[n][3]+sum[n][1]+min(sum[n][2], k-sum[n][1]) << endl;
}
cout << res << endl;
}
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 | #include <bits/stdc++.h> #include <climits> using namespace std; const int MX = 8009; int sum[MX][4]; int main(){ cin.tie(0)->sync_with_stdio(0); int n, k, d, res = -1; cin >> n >> k >> d; for(auto i = 1; i <= n; ++i){ char c; cin >> c; for(auto j = 1; j <= 3; ++j) sum[i][j] = sum[i-1][j]; sum[i][c-'0']++; } for(auto i = 1; i <= n-2*d+1; ++i){ for(auto j = i+2*d-1; j <= n; ++j){ int skipped = sum[n][1]; skipped -= sum[j-d][1]-sum[i+d-1][1]; skipped += sum[j][2]+sum[i+d-1][2]-sum[j-d][2]-sum[i-1][2]; int taken = sum[n][3]+sum[n][1]; taken -= sum[j][3]+sum[j][1]-sum[i-1][3]-sum[i-1][1]; if(skipped > k) continue; int bonus = sum[n][2]; bonus -= sum[j][2]-sum[i-1][2]; res = max(res, taken + min(bonus, k-skipped)); // cout << i << " " << j << " " << skipped << " " << taken << endl; } } if(sum[n][1] <= k){ res = max(res, sum[n][3]+sum[n][1]+min(sum[n][2], k-sum[n][1])); // cout << 0 << " " << 0 << sum[n][3]+sum[n][1]+min(sum[n][2], k-sum[n][1]) << endl; } cout << res << endl; } |
English