#include <bits/stdc++.h>
#define pb push_back
typedef long long LL;
using namespace std;
const int N = 8010;
int pref3[N];
int pref2[N];
int pref1[N];
int pref12[N];
int tab[N];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int n, k, t;
cin >> n >> k >> t;
int spotkania = 0;
for(int i=1;i<=n;i++)
{
char x;
cin >> x;
if(x=='1') tab[i] = 1;
if(x=='2') tab[i] = 2;
if(x=='3') tab[i] = 3;
spotkania += (tab[i] == 1) + (tab[i] == 2);
pref1[i] = pref1[i-1] + (tab[i] == 1);
pref2[i] = pref2[i-1] + (tab[i] == 2);
pref3[i] = pref3[i-1] + (tab[i] == 3);
pref12[i] = pref12[i-1] + (tab[i] == 2) + (tab[i]==1);
// cout << pref12[i] << " ";
}
// cout << endl;
int res = -1;
for(int i=1;i+t-1<=n;i++)
{
for(int j=i+t;j+t-1<=n;j++)
{
int ilespotkanI = pref12[i+t-1] - pref12[i-1];
int ilespotkanJ = pref12[j+t-1] - pref12[j-1];
int ile1 = pref3[i-1] + pref3[n] - pref3[j+t-1];
int ile2 = pref12[i-1] + pref12[n] - pref12[j+t-1];
int ile11 = pref1[i-1] + pref1[n] - pref1[j+t-1];
//cout << i << " " << i+t-1 << " : " << j << " " << j+t-1 << endl;
// cout << ilespotkanI << " " << ilespotkanJ << " " << ile1 << " " << ile2 << endl;
int k1 = k - ilespotkanI - ilespotkanJ;
if(k1 < 0) continue;
if(k1 - ile11 < 0) continue;
res = max(res, ile1 + min(k1, ile2));
}
}
int k1 = k - pref1[n];
if(k1 >= 0) res = max(res, pref3[n] + pref1[n] + min(pref2[n], k1));
cout << res;
}
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 62 63 64 65 66 67 68 69 | #include <bits/stdc++.h> #define pb push_back typedef long long LL; using namespace std; const int N = 8010; int pref3[N]; int pref2[N]; int pref1[N]; int pref12[N]; int tab[N]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, k, t; cin >> n >> k >> t; int spotkania = 0; for(int i=1;i<=n;i++) { char x; cin >> x; if(x=='1') tab[i] = 1; if(x=='2') tab[i] = 2; if(x=='3') tab[i] = 3; spotkania += (tab[i] == 1) + (tab[i] == 2); pref1[i] = pref1[i-1] + (tab[i] == 1); pref2[i] = pref2[i-1] + (tab[i] == 2); pref3[i] = pref3[i-1] + (tab[i] == 3); pref12[i] = pref12[i-1] + (tab[i] == 2) + (tab[i]==1); // cout << pref12[i] << " "; } // cout << endl; int res = -1; for(int i=1;i+t-1<=n;i++) { for(int j=i+t;j+t-1<=n;j++) { int ilespotkanI = pref12[i+t-1] - pref12[i-1]; int ilespotkanJ = pref12[j+t-1] - pref12[j-1]; int ile1 = pref3[i-1] + pref3[n] - pref3[j+t-1]; int ile2 = pref12[i-1] + pref12[n] - pref12[j+t-1]; int ile11 = pref1[i-1] + pref1[n] - pref1[j+t-1]; //cout << i << " " << i+t-1 << " : " << j << " " << j+t-1 << endl; // cout << ilespotkanI << " " << ilespotkanJ << " " << ile1 << " " << ile2 << endl; int k1 = k - ilespotkanI - ilespotkanJ; if(k1 < 0) continue; if(k1 - ile11 < 0) continue; res = max(res, ile1 + min(k1, ile2)); } } int k1 = k - pref1[n]; if(k1 >= 0) res = max(res, pref3[n] + pref1[n] + min(pref2[n], k1)); cout << res; } |
English