#include<bits/stdc++.h> using namespace std; const int maxn = 8007; int pref[maxn][3]; int main(){ ios_base::sync_with_stdio(0), cin.tie(0); int n, k, t; cin >> n >> k >> t; string s; cin >> s; for(int i = 1; i <= n; i++){ int x = s[i - 1] - '1'; pref[i][x]++; pref[i][0] += pref[i - 1][0]; pref[i][1] += pref[i - 1][1]; pref[i][2] += pref[i - 1][2]; } int lacznie_spotkan = pref[n][0] + pref[n][1]; k = lacznie_spotkan - k; // for(int i = 0; i <= n; i++) cout << pref[i][0] << " "; // cout << endl; // for(int i = 0; i <= n; i++) cout << pref[i][1] << " "; // cout << endl; // for(int i = 0; i <= n; i++) cout << pref[i][2] << " "; // cout << endl; int res = -1; //cout << k << endl; if(pref[n][1] >= k) res = n - max(0,k); // cout << res << endl; for(int l = t + 1; l + t <= n; l++){ for(int r = l; r + t <= n; r++){ //przedzial [l, r] jestesmy w biurze //jedziemy [l - r, l - 1] wracamy [r + 1, r + t] int spotkania_biuro = pref[r][0] - pref[l - 1][0]; int spotkania_zdalne = pref[r][1] - pref[l - 1][1]; int suma = spotkania_zdalne + spotkania_biuro; if(suma >= k) res = max(res, n - 2*t - (r - l + 1)); else{ //musimy uczesnticzyc w jakis spotkaniach bedac w domu int spotkania_dom = pref[l - t - 1][1] + pref[n][1] - pref[r + t][1]; if(suma + spotkania_dom >= k){ //mamy wystarczajaco spotkan w domu res = max(res, n - 2*t - (r - l + 1) - (max(0,k) - suma)); } } } } // 1 2 3 4 5 6 7 8 // t t m m m t t d cout << res << '\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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #include<bits/stdc++.h> using namespace std; const int maxn = 8007; int pref[maxn][3]; int main(){ ios_base::sync_with_stdio(0), cin.tie(0); int n, k, t; cin >> n >> k >> t; string s; cin >> s; for(int i = 1; i <= n; i++){ int x = s[i - 1] - '1'; pref[i][x]++; pref[i][0] += pref[i - 1][0]; pref[i][1] += pref[i - 1][1]; pref[i][2] += pref[i - 1][2]; } int lacznie_spotkan = pref[n][0] + pref[n][1]; k = lacznie_spotkan - k; // for(int i = 0; i <= n; i++) cout << pref[i][0] << " "; // cout << endl; // for(int i = 0; i <= n; i++) cout << pref[i][1] << " "; // cout << endl; // for(int i = 0; i <= n; i++) cout << pref[i][2] << " "; // cout << endl; int res = -1; //cout << k << endl; if(pref[n][1] >= k) res = n - max(0,k); // cout << res << endl; for(int l = t + 1; l + t <= n; l++){ for(int r = l; r + t <= n; r++){ //przedzial [l, r] jestesmy w biurze //jedziemy [l - r, l - 1] wracamy [r + 1, r + t] int spotkania_biuro = pref[r][0] - pref[l - 1][0]; int spotkania_zdalne = pref[r][1] - pref[l - 1][1]; int suma = spotkania_zdalne + spotkania_biuro; if(suma >= k) res = max(res, n - 2*t - (r - l + 1)); else{ //musimy uczesnticzyc w jakis spotkaniach bedac w domu int spotkania_dom = pref[l - t - 1][1] + pref[n][1] - pref[r + t][1]; if(suma + spotkania_dom >= k){ //mamy wystarczajaco spotkan w domu res = max(res, n - 2*t - (r - l + 1) - (max(0,k) - suma)); } } } } // 1 2 3 4 5 6 7 8 // t t m m m t t d cout << res << '\n'; } |