#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define rep(a, b) for(int a = 0; a < (b); ++a) #define st first #define nd second #define pb push_back #define all(a) a.begin(), a.end() const int LIM=8e3+7; int pref[3][LIM]; int licz(int a, int b, int c, int k) { if(a>k) return -1; if(a+b<=k) return a+b+c; return c+k; } int sum(int t, int l, int r) { if(l>r) return 0; return pref[t][r+1]-pref[t][l]; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, k, t; string s; cin >> n >> k >> t >> s; rep(i, n) { rep(j, 3) pref[j][i+1]=pref[j][i]; ++pref[s[i]-'1'][i+1]; } int ans=licz(pref[0][n], pref[1][n], pref[2][n], k); rep(i, n) for(int j=i+2*t-1; j<n; ++j) { int nk=k-sum(0, i, i+t-1)-sum(1, i, i+t-1)-sum(0, j-t+1, j)-sum(1, j-t+1, j); ans=max(ans, licz(sum(0, 0, i-1)+sum(0, j+1, n-1), sum(1, 0, i-1)+sum(1, j+1, n-1), sum(2, 0, i-1)+sum(2, j+1, n-1), nk)); } cout << ans << '\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 | #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define rep(a, b) for(int a = 0; a < (b); ++a) #define st first #define nd second #define pb push_back #define all(a) a.begin(), a.end() const int LIM=8e3+7; int pref[3][LIM]; int licz(int a, int b, int c, int k) { if(a>k) return -1; if(a+b<=k) return a+b+c; return c+k; } int sum(int t, int l, int r) { if(l>r) return 0; return pref[t][r+1]-pref[t][l]; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, k, t; string s; cin >> n >> k >> t >> s; rep(i, n) { rep(j, 3) pref[j][i+1]=pref[j][i]; ++pref[s[i]-'1'][i+1]; } int ans=licz(pref[0][n], pref[1][n], pref[2][n], k); rep(i, n) for(int j=i+2*t-1; j<n; ++j) { int nk=k-sum(0, i, i+t-1)-sum(1, i, i+t-1)-sum(0, j-t+1, j)-sum(1, j-t+1, j); ans=max(ans, licz(sum(0, 0, i-1)+sum(0, j+1, n-1), sum(1, 0, i-1)+sum(1, j+1, n-1), sum(2, 0, i-1)+sum(2, j+1, n-1), nk)); } cout << ans << '\n'; } |