#include<bits/stdc++.h>
using namespace std;
int numOfEvent[4][8002];
int main(){
cin.tie(0);
ios_base::sync_with_stdio(0);
int n, k, t, ans = -1;
char c;
cin >> n >> k >> t;
for(int i = 1 ; i <= n ; i++){
cin >> c;
for(int j = 1 ; j <= 3 ; j++) numOfEvent[j][i] = numOfEvent[j][i - 1];
numOfEvent[c - '0'][i]++;
}
if(numOfEvent[1][n] <= k){
cout << n - numOfEvent[2][n] - numOfEvent[1][n] + min(k, numOfEvent[2][n] + numOfEvent[1][n]) << '\n';
return 0;
}
int programing, skipped, workFromHome;
for(int i = 1 ; i <= n - 2 * t ; i++){
for(int j = i + t ; j <= n - t ; j++){
programing = numOfEvent[3][i - 1] + numOfEvent[1][i - 1] + numOfEvent[3][n] + numOfEvent[1][n] - numOfEvent[3][j + t] - numOfEvent[1][j + t];
skipped = numOfEvent[1][i + t - 1] + numOfEvent[2][i + t - 1] - numOfEvent[2][i - 1] + numOfEvent[1][n] - numOfEvent[1][j] + numOfEvent[2][j + t] - numOfEvent[2][j];
workFromHome = numOfEvent[2][i - 1] + numOfEvent[2][n] - numOfEvent[2][j + t];
if(skipped <= k) ans = max(ans, programing + min(k - skipped, workFromHome));
}
}
cout << ans << '\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 | #include<bits/stdc++.h> using namespace std; int numOfEvent[4][8002]; int main(){ cin.tie(0); ios_base::sync_with_stdio(0); int n, k, t, ans = -1; char c; cin >> n >> k >> t; for(int i = 1 ; i <= n ; i++){ cin >> c; for(int j = 1 ; j <= 3 ; j++) numOfEvent[j][i] = numOfEvent[j][i - 1]; numOfEvent[c - '0'][i]++; } if(numOfEvent[1][n] <= k){ cout << n - numOfEvent[2][n] - numOfEvent[1][n] + min(k, numOfEvent[2][n] + numOfEvent[1][n]) << '\n'; return 0; } int programing, skipped, workFromHome; for(int i = 1 ; i <= n - 2 * t ; i++){ for(int j = i + t ; j <= n - t ; j++){ programing = numOfEvent[3][i - 1] + numOfEvent[1][i - 1] + numOfEvent[3][n] + numOfEvent[1][n] - numOfEvent[3][j + t] - numOfEvent[1][j + t]; skipped = numOfEvent[1][i + t - 1] + numOfEvent[2][i + t - 1] - numOfEvent[2][i - 1] + numOfEvent[1][n] - numOfEvent[1][j] + numOfEvent[2][j + t] - numOfEvent[2][j]; workFromHome = numOfEvent[2][i - 1] + numOfEvent[2][n] - numOfEvent[2][j + t]; if(skipped <= k) ans = max(ans, programing + min(k - skipped, workFromHome)); } } cout << ans << '\n'; } |
English