#include <iostream>
using namespace std;
int ile[8005][4];
int przedzial(int l,int r,int t){
if(l>r) return 0;
return ile[r][t]-ile[l-1][t];
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
ile[0][1]=0;
ile[0][2]=0;
ile[0][3]=0;
int wyn = -1;
int n,k,t;
cin>>n>>k>>t;
int ile_spotkan = 0;
string s;
cin>>s;
for(int i=0;i<s.size();i++){
int rodzaj = int(s[i]-'0');
ile[i+1][1] = ile[i][1];
ile[i+1][2] = ile[i][2];
ile[i+1][3] = ile[i][3];
ile[i+1][rodzaj]++;
if(rodzaj == 1 || rodzaj == 2) ile_spotkan++;
}
k = max(ile_spotkan - k,0);
for(int i=t+1;i<=n-t;i++){
for(int j=i;j<=n-t;j++){
int spotkania = przedzial(i,j,1)+przedzial(i,j,2)+przedzial(1,i-t-1,2)+przedzial(j+t+1,n,2);
if(spotkania>=k){
int zadania = przedzial(1,i-t-1,3) + przedzial(1,i-t-1,1) + przedzial(j+t+1,n,3) + przedzial(j+t+1,n,1) + spotkania - k;
/*if(zadania>wyn){
cout<<" mozemy zrobic "<<zadania<<" zadan na przedziale "<<i<<" "<<j<<endl;
}*/
wyn = max(wyn , zadania);
}
}
}
if(przedzial(1,n,2)>=k){
wyn = max(n-k,wyn);
}
cout<<wyn<<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 | #include <iostream> using namespace std; int ile[8005][4]; int przedzial(int l,int r,int t){ if(l>r) return 0; return ile[r][t]-ile[l-1][t]; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); ile[0][1]=0; ile[0][2]=0; ile[0][3]=0; int wyn = -1; int n,k,t; cin>>n>>k>>t; int ile_spotkan = 0; string s; cin>>s; for(int i=0;i<s.size();i++){ int rodzaj = int(s[i]-'0'); ile[i+1][1] = ile[i][1]; ile[i+1][2] = ile[i][2]; ile[i+1][3] = ile[i][3]; ile[i+1][rodzaj]++; if(rodzaj == 1 || rodzaj == 2) ile_spotkan++; } k = max(ile_spotkan - k,0); for(int i=t+1;i<=n-t;i++){ for(int j=i;j<=n-t;j++){ int spotkania = przedzial(i,j,1)+przedzial(i,j,2)+przedzial(1,i-t-1,2)+przedzial(j+t+1,n,2); if(spotkania>=k){ int zadania = przedzial(1,i-t-1,3) + przedzial(1,i-t-1,1) + przedzial(j+t+1,n,3) + przedzial(j+t+1,n,1) + spotkania - k; /*if(zadania>wyn){ cout<<" mozemy zrobic "<<zadania<<" zadan na przedziale "<<i<<" "<<j<<endl; }*/ wyn = max(wyn , zadania); } } } if(przedzial(1,n,2)>=k){ wyn = max(n-k,wyn); } cout<<wyn<<endl; return 0; } |
English