#include <bits/stdc++.h>
#define ll long long
#define vi std::vector<int>
#define pi std::pair<int, int>
int prefix[8002][3];
int main()
{
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
int n, k, t;
std::cin >> n >> k >> t;
char znak;
for(int i = 1; i <= n; i++) {
std::cin >> znak;
prefix[i][0] = prefix[i-1][0];
prefix[i][1] = prefix[i-1][1];
prefix[i][2] = prefix[i-1][2];
if(znak == '1')
prefix[i][0]++;
else if(znak == '2')
prefix[i][1]++;
else
prefix[i][2]++;
}
prefix[n + 1][0] = prefix[n][0];
prefix[n + 1][1] = prefix[n][1];
prefix[n + 1][2] = prefix[n][2];
int max = -1, x;
for(int a = 1; a <= n; a++)
for(int b = a + 2 * t - 1; b <= n; b++) {
x = prefix[a + t - 1][1] - prefix[a - 1][1] + prefix[a + t - 1][0] + prefix[n][0] - prefix[b - t][0] + prefix[b][1] - prefix[b-t][1]; // prefix[2][1] - prefix[0][1] + prefix[2][0] + prefix[10][0] - prefix[2][0] + prefix[4][1] - prefix[2][1], a = 1, b = 4
if(x <= k) // (1, 2)[1] + (0, 2)[0] + (3, 10)[0] + (3, 4)[1]
max = std::max(max, std::min(k-x, prefix[a-1][1] + prefix[n][1] - prefix[b][1] + prefix[a-1][0] + prefix[n][0] - prefix[b][0]) + prefix[a-1][2] + prefix[n][2] - prefix[b][2]); //(0, 3)[2] + (9, 10)[2]
}
if(prefix[n][0] <= k)
max = std::max(max, std::min(k-prefix[n][0], prefix[n][1] + prefix[n][0]) + prefix[n][2]);
std::cout << max;
}
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 <bits/stdc++.h> #define ll long long #define vi std::vector<int> #define pi std::pair<int, int> int prefix[8002][3]; int main() { std::ios_base::sync_with_stdio(0); std::cin.tie(0); int n, k, t; std::cin >> n >> k >> t; char znak; for(int i = 1; i <= n; i++) { std::cin >> znak; prefix[i][0] = prefix[i-1][0]; prefix[i][1] = prefix[i-1][1]; prefix[i][2] = prefix[i-1][2]; if(znak == '1') prefix[i][0]++; else if(znak == '2') prefix[i][1]++; else prefix[i][2]++; } prefix[n + 1][0] = prefix[n][0]; prefix[n + 1][1] = prefix[n][1]; prefix[n + 1][2] = prefix[n][2]; int max = -1, x; for(int a = 1; a <= n; a++) for(int b = a + 2 * t - 1; b <= n; b++) { x = prefix[a + t - 1][1] - prefix[a - 1][1] + prefix[a + t - 1][0] + prefix[n][0] - prefix[b - t][0] + prefix[b][1] - prefix[b-t][1]; // prefix[2][1] - prefix[0][1] + prefix[2][0] + prefix[10][0] - prefix[2][0] + prefix[4][1] - prefix[2][1], a = 1, b = 4 if(x <= k) // (1, 2)[1] + (0, 2)[0] + (3, 10)[0] + (3, 4)[1] max = std::max(max, std::min(k-x, prefix[a-1][1] + prefix[n][1] - prefix[b][1] + prefix[a-1][0] + prefix[n][0] - prefix[b][0]) + prefix[a-1][2] + prefix[n][2] - prefix[b][2]); //(0, 3)[2] + (9, 10)[2] } if(prefix[n][0] <= k) max = std::max(max, std::min(k-prefix[n][0], prefix[n][1] + prefix[n][0]) + prefix[n][2]); std::cout << max; } |
English