#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
int n, k, t;
int pref[3][8005];
int sum(int t, int l, int r) {
return pref[t][r] - pref[t][l-1];
}
int res = -1;
inline void update_res(int pr, int zd, int fr, int mis) {
if(pr + mis > k) return;
if(zd + pr + mis < k) res = max(res, fr+zd+pr);
else res = max(res, fr+k-mis);
}
int main() {
ios_base::sync_with_stdio(0);
cin>>n>>k>>t;
for(int i=1;i<=n;i++) {
char x;
cin>>x;
int a = x-'0'-1;
pref[0][i] = pref[0][i-1];
pref[1][i] = pref[1][i-1];
pref[2][i] = pref[2][i-1];
pref[a][i]++;
}
update_res(pref[0][n], pref[1][n], pref[2][n], 0);
for(int i=1;i<=n-2*t+1;i++) {
for(int j=i+t;j<=n-t+1;j++) {
int pr = pref[0][i-1] + pref[0][n] - pref[0][j+t-1];
int zd = pref[1][i-1] + pref[1][n] - pref[1][j+t-1];
int fr = pref[2][i-1] + pref[2][n] - pref[2][j+t-1];
int mis = sum(0, i, i+t-1) + sum(0, j, j+t-1) + sum(1, i, i+t-1) + sum(1, j, j+t-1);
update_res(pr, zd, fr, mis);
// cout<<i<<" "<<j<<" "<<pr<<" "<<zd<<" "<<fr<<" "<<mis<<" "<<res<<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 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include <bits/stdc++.h> using namespace std; typedef pair<int,int> PII; int n, k, t; int pref[3][8005]; int sum(int t, int l, int r) { return pref[t][r] - pref[t][l-1]; } int res = -1; inline void update_res(int pr, int zd, int fr, int mis) { if(pr + mis > k) return; if(zd + pr + mis < k) res = max(res, fr+zd+pr); else res = max(res, fr+k-mis); } int main() { ios_base::sync_with_stdio(0); cin>>n>>k>>t; for(int i=1;i<=n;i++) { char x; cin>>x; int a = x-'0'-1; pref[0][i] = pref[0][i-1]; pref[1][i] = pref[1][i-1]; pref[2][i] = pref[2][i-1]; pref[a][i]++; } update_res(pref[0][n], pref[1][n], pref[2][n], 0); for(int i=1;i<=n-2*t+1;i++) { for(int j=i+t;j<=n-t+1;j++) { int pr = pref[0][i-1] + pref[0][n] - pref[0][j+t-1]; int zd = pref[1][i-1] + pref[1][n] - pref[1][j+t-1]; int fr = pref[2][i-1] + pref[2][n] - pref[2][j+t-1]; int mis = sum(0, i, i+t-1) + sum(0, j, j+t-1) + sum(1, i, i+t-1) + sum(1, j, j+t-1); update_res(pr, zd, fr, mis); // cout<<i<<" "<<j<<" "<<pr<<" "<<zd<<" "<<fr<<" "<<mis<<" "<<res<<endl; } } cout<<res<<endl; } |
English