#include <bits/stdc++.h>
using namespace std;
int main() {
int n,k,t; cin >> n >> k >> t;
vector<int> tab(n+1);
string s; cin >> s;
for(int i = 0; i < s.size(); i++) tab[i+1] = s[i] - '0';
vector<vector<int>> suma(n+1, vector<int>(4));
for(int i = 1; i <= n; i++) {
suma[i][1] = suma[i-1][1];
suma[i][2] = suma[i-1][2];
suma[i][3] = suma[i-1][3];
if(tab[i] == 1) suma[i][1]++;
if(tab[i] == 2) suma[i][2]++;
if(tab[i] == 3) suma[i][3]++;
}
int ans = -1;
for(int i = 1; i <= n; i++) {
for(int j = i + 2*t-1; j <= n; j++) {
int opuszczone = 0;
opuszczone += suma[j][1] - suma[j - t][1];
opuszczone += suma[j][2] - suma[j - t][2];
opuszczone += suma[i+t-1][1] - suma[i-1][1];
opuszczone += suma[i+t-1][2] - suma[i-1][2];
int opuszczone2 = 0;
opuszczone2 += suma[i-1][1];
opuszczone2 += suma[n][1] - suma[j][1];
int tmpans = n - (j - i + 1);
//tmpans += suma[i-1][3] + suma[n][3] - suma[j][3];
int zdalne = suma[i-1][2] + suma[n][2] - suma[j][2];
//if(opuszczone + opuszczone2 <= k) ans = max(ans,tmpans + min(k - (opuszczone + opuszczone2),opuszczone2));
//
tmpans -= max(0, zdalne - (k - (opuszczone + opuszczone2)));
bool czy = opuszczone + opuszczone2 <= k;
//cout << i << " " << j << " " << czy << " " << tmpans << " " << opuszczone << " " << opuszczone2 << endl;
if(czy) ans = max(ans,tmpans);
}
}
if(suma[n][1] <= k) ans = suma[n][3] + min(k,suma[n][1]+suma[n][2]);
cout << ans;
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 | #include <bits/stdc++.h> using namespace std; int main() { int n,k,t; cin >> n >> k >> t; vector<int> tab(n+1); string s; cin >> s; for(int i = 0; i < s.size(); i++) tab[i+1] = s[i] - '0'; vector<vector<int>> suma(n+1, vector<int>(4)); for(int i = 1; i <= n; i++) { suma[i][1] = suma[i-1][1]; suma[i][2] = suma[i-1][2]; suma[i][3] = suma[i-1][3]; if(tab[i] == 1) suma[i][1]++; if(tab[i] == 2) suma[i][2]++; if(tab[i] == 3) suma[i][3]++; } int ans = -1; for(int i = 1; i <= n; i++) { for(int j = i + 2*t-1; j <= n; j++) { int opuszczone = 0; opuszczone += suma[j][1] - suma[j - t][1]; opuszczone += suma[j][2] - suma[j - t][2]; opuszczone += suma[i+t-1][1] - suma[i-1][1]; opuszczone += suma[i+t-1][2] - suma[i-1][2]; int opuszczone2 = 0; opuszczone2 += suma[i-1][1]; opuszczone2 += suma[n][1] - suma[j][1]; int tmpans = n - (j - i + 1); //tmpans += suma[i-1][3] + suma[n][3] - suma[j][3]; int zdalne = suma[i-1][2] + suma[n][2] - suma[j][2]; //if(opuszczone + opuszczone2 <= k) ans = max(ans,tmpans + min(k - (opuszczone + opuszczone2),opuszczone2)); // tmpans -= max(0, zdalne - (k - (opuszczone + opuszczone2))); bool czy = opuszczone + opuszczone2 <= k; //cout << i << " " << j << " " << czy << " " << tmpans << " " << opuszczone << " " << opuszczone2 << endl; if(czy) ans = max(ans,tmpans); } } if(suma[n][1] <= k) ans = suma[n][3] + min(k,suma[n][1]+suma[n][2]); cout << ans; return 0; } |
English