#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; } |
English