#include <iostream> #include <algorithm> #include <vector> using namespace std; #define ll long long #define pii pair<int, int> #define pb push_back const int s = 8'005; int praca[s], dom[s]; void f() { //input int n, maxi, t; cin >> n >> maxi >> t; string a, b; cin >> b; a = '0' + b; t--; //preprocess for (int i = 1; i <= n; i++) { praca[i] = praca[i - 1]; if (a[i] == '1') praca[i]++; dom[i] = dom[i - 1]; if (a[i] == '2') dom[i]++; } //kazdy poczatek i koniec int ans = -1; for (int l = 1; l <= n; l++) { for (int r = l + 1; r <= n - t; r++) { if (l + t >= r || r + t > n) continue; int k = maxi, k1 = maxi; k -= praca[l + t]; k -= praca[n] - praca[r - 1]; k -= dom[l + t] - dom[l - 1] + dom[r + t] - dom[r - 1]; //zadania w biurze nie int comp = l - 1 + n - (r + t); int summ = dom[l - 1] + dom[n] - dom[r + t]; if (k >= 0) ans = max(ans, comp - max(summ - k, 0)); } } //case bez pracy int k = maxi - praca[n]; if (k >= 0) ans = max(ans, n - max(0, dom[n] + praca[n] - maxi)); //output cout << ans; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); f(); }
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 | #include <iostream> #include <algorithm> #include <vector> using namespace std; #define ll long long #define pii pair<int, int> #define pb push_back const int s = 8'005; int praca[s], dom[s]; void f() { //input int n, maxi, t; cin >> n >> maxi >> t; string a, b; cin >> b; a = '0' + b; t--; //preprocess for (int i = 1; i <= n; i++) { praca[i] = praca[i - 1]; if (a[i] == '1') praca[i]++; dom[i] = dom[i - 1]; if (a[i] == '2') dom[i]++; } //kazdy poczatek i koniec int ans = -1; for (int l = 1; l <= n; l++) { for (int r = l + 1; r <= n - t; r++) { if (l + t >= r || r + t > n) continue; int k = maxi, k1 = maxi; k -= praca[l + t]; k -= praca[n] - praca[r - 1]; k -= dom[l + t] - dom[l - 1] + dom[r + t] - dom[r - 1]; //zadania w biurze nie int comp = l - 1 + n - (r + t); int summ = dom[l - 1] + dom[n] - dom[r + t]; if (k >= 0) ans = max(ans, comp - max(summ - k, 0)); } } //case bez pracy int k = maxi - praca[n]; if (k >= 0) ans = max(ans, n - max(0, dom[n] + praca[n] - maxi)); //output cout << ans; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); f(); } |