#include <bits/stdc++.h> using namespace std; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,k,t; cin >> n >> k >> t; vector<vector<int>> pref(3, vector<int>(n+2)); vector<vector<int>> suf(3, vector<int>(n+2)); vector<int> a(n+1); int ans = -1; char c; for (int i = 1; i <= n; i++){ cin >> c; a[i] = c - '1'; } for (int l = 0; l < 3; l++){ for (int i = 1; i <= n; i++){ pref[l][i] = (a[i]==l); pref[l][i] += pref[l][i-1]; } for (int i = n; i >= 1; i--){ suf[l][i] = (a[i]==l); suf[l][i] += suf[l][i+1]; } } // nie jedziemy do biura if (pref[0][n] <= k){ ans = max(ans, pref[2][n] + min(pref[1][n]+pref[0][n], k)); } for (int i = 1; i + t - 1 <= n; i++){ for (int j = i+1; j+t-1 <= n; j++){ int bef = pref[0][i+t-1] + (pref[1][i+t-1] - pref[1][i-1]); int aft = suf[0][j] + (suf[1][j] - suf[1][j+t]); //cout << i << " " << j << " " << bef << " " << aft << "\n"; if ((bef+aft) > k) continue; ans = max(ans, pref[2][i-1] + suf[2][j+t] + pref[0][i-1] + suf[0][j+t] + min(pref[1][i-1]+suf[1][j+t], k - (bef+aft))); } } 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 45 | #include <bits/stdc++.h> using namespace std; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,k,t; cin >> n >> k >> t; vector<vector<int>> pref(3, vector<int>(n+2)); vector<vector<int>> suf(3, vector<int>(n+2)); vector<int> a(n+1); int ans = -1; char c; for (int i = 1; i <= n; i++){ cin >> c; a[i] = c - '1'; } for (int l = 0; l < 3; l++){ for (int i = 1; i <= n; i++){ pref[l][i] = (a[i]==l); pref[l][i] += pref[l][i-1]; } for (int i = n; i >= 1; i--){ suf[l][i] = (a[i]==l); suf[l][i] += suf[l][i+1]; } } // nie jedziemy do biura if (pref[0][n] <= k){ ans = max(ans, pref[2][n] + min(pref[1][n]+pref[0][n], k)); } for (int i = 1; i + t - 1 <= n; i++){ for (int j = i+1; j+t-1 <= n; j++){ int bef = pref[0][i+t-1] + (pref[1][i+t-1] - pref[1][i-1]); int aft = suf[0][j] + (suf[1][j] - suf[1][j+t]); //cout << i << " " << j << " " << bef << " " << aft << "\n"; if ((bef+aft) > k) continue; ans = max(ans, pref[2][i-1] + suf[2][j+t] + pref[0][i-1] + suf[0][j+t] + min(pref[1][i-1]+suf[1][j+t], k - (bef+aft))); } } cout << ans; return 0; } |