#include<bits/stdc++.h>
using namespace std;
int main(){
int n, k, t;
cin >> n >> k >> t;
int ans = -1;
string s;
cin >> s;
vector<int> dp1(n+1), dp2(n+1);
dp1[0] = 0;
dp2[0] = 0;
for(int i = 1; i <= n; i++){
dp1[i] = dp1[i-1];
dp2[i] = dp2[i-1];
if(s[i-1] == '1'){
dp1[i]++;
}
if(s[i-1] == '2'){
dp2[i]++;
dp1[i]++;
}
}
if(dp2[n] + k >= dp1[n]){
ans = n - max((dp1[n] - k), 0);
}
for(int i = 1; i <= n; i++){
for(int j = i + 2 * t; j <= n; j++){
int home_meet = dp2[i-1] + dp2[n] - dp2[j];
int office_meet = dp1[j - t] - dp1[i+t-1];
if(office_meet + home_meet < dp1[n] - k){
continue;
}
int l = i - 1 + n - j;
int nes_home_meet = max(dp1[n] - k - office_meet, 0);
l -= nes_home_meet;
ans = max(l, ans);
}
}
if(ans == 1e9){
cout << -1 << '\n';
}else{
cout << ans << "\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 49 | #include<bits/stdc++.h> using namespace std; int main(){ int n, k, t; cin >> n >> k >> t; int ans = -1; string s; cin >> s; vector<int> dp1(n+1), dp2(n+1); dp1[0] = 0; dp2[0] = 0; for(int i = 1; i <= n; i++){ dp1[i] = dp1[i-1]; dp2[i] = dp2[i-1]; if(s[i-1] == '1'){ dp1[i]++; } if(s[i-1] == '2'){ dp2[i]++; dp1[i]++; } } if(dp2[n] + k >= dp1[n]){ ans = n - max((dp1[n] - k), 0); } for(int i = 1; i <= n; i++){ for(int j = i + 2 * t; j <= n; j++){ int home_meet = dp2[i-1] + dp2[n] - dp2[j]; int office_meet = dp1[j - t] - dp1[i+t-1]; if(office_meet + home_meet < dp1[n] - k){ continue; } int l = i - 1 + n - j; int nes_home_meet = max(dp1[n] - k - office_meet, 0); l -= nes_home_meet; ans = max(l, ans); } } if(ans == 1e9){ cout << -1 << '\n'; }else{ cout << ans << "\n"; } return 0; } |
English