#include <bits/stdc++.h> using namespace std; int main(){ cin.tie(0)->sync_with_stdio(0); int nn, kk, tt; cin >> nn >> kk >> tt; string ss; cin >> ss; vector<int> v1(nn+1,0), v2(nn+1,0), v3(nn+1,0); for (int ii = 1; ii <= nn; ii++){ v1[ii] = v1[ii-1] + (ss[ii-1]=='1'); v2[ii] = v2[ii-1] + (ss[ii-1]=='2'); v3[ii] = v3[ii-1] + (ss[ii-1]=='3'); } auto su = [&](const vector<int>& v, int l, int r)->int { return (l > r ? 0 : v[r]-v[l-1]); }; long long an = -1; int t1 = su(v1,1,nn); if(t1 <= kk){ int t2 = su(v2,1,nn), t3 = su(v3,1,nn); int ad = min(t2, kk-t1); an = max(an, (long long)t3 + t1 + ad); } for (int xx = 1; xx <= nn-2*tt+1; xx++){ for (int yy = xx+tt; yy <= nn-tt+1; yy++){ int h1 = su(v1,1,xx-1), h2 = su(v2,1,xx-1), h3 = su(v3,1,xx-1); int r1 = su(v1,yy+tt,nn), r2 = su(v2,yy+tt,nn), r3 = su(v3,yy+tt,nn); int m1 = h1 + r1, m2 = h2 + r2, m3 = h3 + r3; int d1 = su(v1,xx,xx+tt-1) + su(v1,yy,yy+tt-1); int d2 = su(v2,xx,xx+tt-1) + su(v2,yy,yy+tt-1); int rd = d1 + d2; if(m1 + rd > kk) continue; int av = kk - (m1 + rd); int ex = min(m2, av); int sm = m3 + m1 + ex; an = max(an, (long long)sm); } } cout << an; 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 | #include <bits/stdc++.h> using namespace std; int main(){ cin.tie(0)->sync_with_stdio(0); int nn, kk, tt; cin >> nn >> kk >> tt; string ss; cin >> ss; vector<int> v1(nn+1,0), v2(nn+1,0), v3(nn+1,0); for (int ii = 1; ii <= nn; ii++){ v1[ii] = v1[ii-1] + (ss[ii-1]=='1'); v2[ii] = v2[ii-1] + (ss[ii-1]=='2'); v3[ii] = v3[ii-1] + (ss[ii-1]=='3'); } auto su = [&](const vector<int>& v, int l, int r)->int { return (l > r ? 0 : v[r]-v[l-1]); }; long long an = -1; int t1 = su(v1,1,nn); if(t1 <= kk){ int t2 = su(v2,1,nn), t3 = su(v3,1,nn); int ad = min(t2, kk-t1); an = max(an, (long long)t3 + t1 + ad); } for (int xx = 1; xx <= nn-2*tt+1; xx++){ for (int yy = xx+tt; yy <= nn-tt+1; yy++){ int h1 = su(v1,1,xx-1), h2 = su(v2,1,xx-1), h3 = su(v3,1,xx-1); int r1 = su(v1,yy+tt,nn), r2 = su(v2,yy+tt,nn), r3 = su(v3,yy+tt,nn); int m1 = h1 + r1, m2 = h2 + r2, m3 = h3 + r3; int d1 = su(v1,xx,xx+tt-1) + su(v1,yy,yy+tt-1); int d2 = su(v2,xx,xx+tt-1) + su(v2,yy,yy+tt-1); int rd = d1 + d2; if(m1 + rd > kk) continue; int av = kk - (m1 + rd); int ex = min(m2, av); int sm = m3 + m1 + ex; an = max(an, (long long)sm); } } cout << an; return 0; } |