#include<bits/stdc++.h>
using namespace std;
const int biuro = 49;
const int home = 50;
const int nothing = 51;
int n,k,t;
string s;
int biuroLewo[8001];
int zdalneLewo[8001];
int wynik(int l, int p)
{
int pominieteLewo = biuroLewo[l];
pominieteLewo += (biuroLewo[l+t]-biuroLewo[l]) + (zdalneLewo[l+t]-zdalneLewo[l]);
int pominietePrawo = biuroLewo[n]-biuroLewo[p+t];
// cerr<<"pominietePrawo1: "<<pominietePrawo;
pominietePrawo += (biuroLewo[p+t]-biuroLewo[p]) + (zdalneLewo[p+t]-zdalneLewo[p]);
int pominiete = pominieteLewo + pominietePrawo;
// cerr<<" pominieteLewo: "<<pominieteLewo<<" pominietePrawo: "<<pominietePrawo;
if(pominiete>k)
{
// cerr<<endl;
return -1;
}
else
{
int zdalneDoPominiecia = zdalneLewo[l] + zdalneLewo[n] - zdalneLewo[p+t];
int dodatkoweGodziny = min(zdalneDoPominiecia,(k-pominiete));
// cerr<<" zdalneDoPominiecia: "<<zdalneDoPominiecia<<" dodatkoweGodziny: "<<dodatkoweGodziny<<endl;
return n - (p-l+t) + dodatkoweGodziny - zdalneDoPominiecia;
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin>>n>>k>>t>>s;
biuroLewo[0]=0;
zdalneLewo[0]=0;
for(int i=1;i<=n;i++)
{
zdalneLewo[i]=zdalneLewo[i-1];
biuroLewo[i]=biuroLewo[i-1];
switch(s[i-1])
{
case biuro:
biuroLewo[i]++;
break;
case home:
zdalneLewo[i]++;
break;
case nothing:
break;
}
}
// for(int i=0;i<=n;i++)
// cerr<<zdalneLewo[i]<<" ";
// cerr<<endl;
// for(int i=0;i<n;i++)
// cerr<<biuroLewo[i]<<" ";
// cerr<<endl;
if(biuroLewo[n]<=k)
{
cout<<min(k-biuroLewo[n], zdalneLewo[n])+n-zdalneLewo[n]<<endl;
return 0;
}
int w=-1;
for(int i=0;i<n-2*t;i++)
{
for(int j=i+t+1;j<n-t+1;j++)
{
int wtemp = wynik(i,j);
// cerr<<i<<" "<<j<<" "<<wtemp<<endl;;
w=max(wtemp,w);
}
}
cout<<w<<endl;
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 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 70 71 72 73 74 75 76 77 78 79 80 81 82 | #include<bits/stdc++.h> using namespace std; const int biuro = 49; const int home = 50; const int nothing = 51; int n,k,t; string s; int biuroLewo[8001]; int zdalneLewo[8001]; int wynik(int l, int p) { int pominieteLewo = biuroLewo[l]; pominieteLewo += (biuroLewo[l+t]-biuroLewo[l]) + (zdalneLewo[l+t]-zdalneLewo[l]); int pominietePrawo = biuroLewo[n]-biuroLewo[p+t]; // cerr<<"pominietePrawo1: "<<pominietePrawo; pominietePrawo += (biuroLewo[p+t]-biuroLewo[p]) + (zdalneLewo[p+t]-zdalneLewo[p]); int pominiete = pominieteLewo + pominietePrawo; // cerr<<" pominieteLewo: "<<pominieteLewo<<" pominietePrawo: "<<pominietePrawo; if(pominiete>k) { // cerr<<endl; return -1; } else { int zdalneDoPominiecia = zdalneLewo[l] + zdalneLewo[n] - zdalneLewo[p+t]; int dodatkoweGodziny = min(zdalneDoPominiecia,(k-pominiete)); // cerr<<" zdalneDoPominiecia: "<<zdalneDoPominiecia<<" dodatkoweGodziny: "<<dodatkoweGodziny<<endl; return n - (p-l+t) + dodatkoweGodziny - zdalneDoPominiecia; } } int main() { ios_base::sync_with_stdio(0); cin>>n>>k>>t>>s; biuroLewo[0]=0; zdalneLewo[0]=0; for(int i=1;i<=n;i++) { zdalneLewo[i]=zdalneLewo[i-1]; biuroLewo[i]=biuroLewo[i-1]; switch(s[i-1]) { case biuro: biuroLewo[i]++; break; case home: zdalneLewo[i]++; break; case nothing: break; } } // for(int i=0;i<=n;i++) // cerr<<zdalneLewo[i]<<" "; // cerr<<endl; // for(int i=0;i<n;i++) // cerr<<biuroLewo[i]<<" "; // cerr<<endl; if(biuroLewo[n]<=k) { cout<<min(k-biuroLewo[n], zdalneLewo[n])+n-zdalneLewo[n]<<endl; return 0; } int w=-1; for(int i=0;i<n-2*t;i++) { for(int j=i+t+1;j<n-t+1;j++) { int wtemp = wynik(i,j); // cerr<<i<<" "<<j<<" "<<wtemp<<endl;; w=max(wtemp,w); } } cout<<w<<endl; return 0; } |
English