#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxN = 8'000; int S = -1; int N, K, T; int praca, meet, fre; vector< int > vec(maxN); int oblicz(int l, int r){ int a = 0, b = 0, c = 0; for(int i = 0; i < l; i++){ if(vec[i] == 1) a++; else if(vec[i] == 2) b++; else c++; } for(int i = l; i < l+T; i++){ if(vec[i] == 1 || vec[i] == 2) a++; } for(int i = r-T+1; i <= r; i++){ if(vec[i] == 1 || vec[i] == 2) a++; } for(int i = r+1; i < N; i++){ if(vec[i] == 1) a++; else if(vec[i] == 2) b++; else c++; } //cout << a << " " << b << " " << c << "\n"; if( a > K ) return -1; return max(S, c+min(K-a, b)); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> N >> K >> T; string st; cin >> st; for(int i = 0; i < N; i++){ vec[i] = st[i]-'0'; if(vec[i] == 3) fre++; else if(vec[i] == 2) meet++; else praca++; } //cout << praca << " " << meet <<" " << fre <<" \n"; if( K >= praca ) S = fre + min(K, meet+praca); for(int l = 0; l < N-2*T+1; l++){ for(int r = l+2*T-1; r < N; r++){ int x = max(S, oblicz(l , r) ); S = max(S, x); //cout << l << " - " << r << ": " << x << "\n"; } } cout << S << "\n"; 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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxN = 8'000; int S = -1; int N, K, T; int praca, meet, fre; vector< int > vec(maxN); int oblicz(int l, int r){ int a = 0, b = 0, c = 0; for(int i = 0; i < l; i++){ if(vec[i] == 1) a++; else if(vec[i] == 2) b++; else c++; } for(int i = l; i < l+T; i++){ if(vec[i] == 1 || vec[i] == 2) a++; } for(int i = r-T+1; i <= r; i++){ if(vec[i] == 1 || vec[i] == 2) a++; } for(int i = r+1; i < N; i++){ if(vec[i] == 1) a++; else if(vec[i] == 2) b++; else c++; } //cout << a << " " << b << " " << c << "\n"; if( a > K ) return -1; return max(S, c+min(K-a, b)); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> N >> K >> T; string st; cin >> st; for(int i = 0; i < N; i++){ vec[i] = st[i]-'0'; if(vec[i] == 3) fre++; else if(vec[i] == 2) meet++; else praca++; } //cout << praca << " " << meet <<" " << fre <<" \n"; if( K >= praca ) S = fre + min(K, meet+praca); for(int l = 0; l < N-2*T+1; l++){ for(int r = l+2*T-1; r < N; r++){ int x = max(S, oblicz(l , r) ); S = max(S, x); //cout << l << " - " << r << ": " << x << "\n"; } } cout << S << "\n"; return 0; } |