#include <bits/stdc++.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, k, m; cin>>n>>k>>m;
string s; cin>>s;
vector<int> a(n+1), b(n+1), c(n+1);
for (int i=1; i<=n; i++)
{
if (s[i-1] == '1') a[i]++;
if (s[i-1] == '2') b[i]++;
if (s[i-1] == '3') c[i]++;
a[i] += a[i-1];
b[i] += b[i-1];
c[i] += c[i-1];
}
int ans = -1, all = a[n] + b[n];
if (b[n] >= all - k)
{
ans = n - max(0, (all - k));
}
for (int i=1; i<=n; i++)
{
for (int j=i+2*m; j<=n+1; j++)
{
int meet = (a[j-m-1] - a[i+m-1]) + (b[j-m-1] - b[i+m-1]);
int left = b[i-1] + (b[n] - b[j-1]);
int rem = max(0, all - meet - k);
int leng = (i-1) + (n - j + 1);
//~ cout<<i<<" "<<j<<" "<<all<<" "<<meet<<" "<<left<<" "<<rem<<" "<<leng<<" "<<ans<<endl;
if (left >= rem)
{
ans = max(ans, leng - rem);
}
}
}
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 37 38 39 40 | #include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, k, m; cin>>n>>k>>m; string s; cin>>s; vector<int> a(n+1), b(n+1), c(n+1); for (int i=1; i<=n; i++) { if (s[i-1] == '1') a[i]++; if (s[i-1] == '2') b[i]++; if (s[i-1] == '3') c[i]++; a[i] += a[i-1]; b[i] += b[i-1]; c[i] += c[i-1]; } int ans = -1, all = a[n] + b[n]; if (b[n] >= all - k) { ans = n - max(0, (all - k)); } for (int i=1; i<=n; i++) { for (int j=i+2*m; j<=n+1; j++) { int meet = (a[j-m-1] - a[i+m-1]) + (b[j-m-1] - b[i+m-1]); int left = b[i-1] + (b[n] - b[j-1]); int rem = max(0, all - meet - k); int leng = (i-1) + (n - j + 1); //~ cout<<i<<" "<<j<<" "<<all<<" "<<meet<<" "<<left<<" "<<rem<<" "<<leng<<" "<<ans<<endl; if (left >= rem) { ans = max(ans, leng - rem); } } } cout<<ans<<"\n"; } |
English