#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
// freopen("input.in", "r", stdin);
//freopen("output.out", "w", stdout);
int n, k, t;
cin >> n >> k >> t;
string a;
cin >> a;
vector<int> plokalne(n + 1, 0);
vector<int> pzdalne(n + 1, 0);
for (int i=0; i<n; i++) {
plokalne[i+1]=plokalne[i]+(a[i]=='1');
pzdalne[i+1]=pzdalne[i]+(a[i]=='2');
}
int il_spotkan_wymag=max(pzdalne[n]+plokalne[n]-k,0);
//Nie jedziemy do pracy
if (pzdalne[n]>=il_spotkan_wymag){
cout<<n-il_spotkan_wymag;
return 0;
}
int il_spotk=0;
int wynik=-1;
int il_spotkan_d,il_spotkan_b;
for(int i=1;i<=n-t;i++){
for (int j=i+t;j+t+1<=n+1;j++){
//1 przedzial
// 0 do i-1 wlacznie
il_spotkan_d=pzdalne[i-1];
//2 przedzial 2h 3
// i+t do j
il_spotkan_b=pzdalne[j]-pzdalne[i+t-1];
il_spotkan_b+=plokalne[j]-plokalne[i+t-1];
//3 przedzial 2h 5
// j+t+1 do n
il_spotkan_d+=pzdalne[n]-pzdalne[j+t+1-1];
if (il_spotkan_d+il_spotkan_b>=il_spotkan_wymag){
int il_spotkan_wymag_dom=max(il_spotkan_wymag-il_spotkan_b,0);
int il_czas_dom=i-1+(n-(j+t+1)+1);
wynik=max(wynik,il_czas_dom-il_spotkan_wymag_dom);
}
}
}
cout<<wynik<<"\n";
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 | #include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); // freopen("input.in", "r", stdin); //freopen("output.out", "w", stdout); int n, k, t; cin >> n >> k >> t; string a; cin >> a; vector<int> plokalne(n + 1, 0); vector<int> pzdalne(n + 1, 0); for (int i=0; i<n; i++) { plokalne[i+1]=plokalne[i]+(a[i]=='1'); pzdalne[i+1]=pzdalne[i]+(a[i]=='2'); } int il_spotkan_wymag=max(pzdalne[n]+plokalne[n]-k,0); //Nie jedziemy do pracy if (pzdalne[n]>=il_spotkan_wymag){ cout<<n-il_spotkan_wymag; return 0; } int il_spotk=0; int wynik=-1; int il_spotkan_d,il_spotkan_b; for(int i=1;i<=n-t;i++){ for (int j=i+t;j+t+1<=n+1;j++){ //1 przedzial // 0 do i-1 wlacznie il_spotkan_d=pzdalne[i-1]; //2 przedzial 2h 3 // i+t do j il_spotkan_b=pzdalne[j]-pzdalne[i+t-1]; il_spotkan_b+=plokalne[j]-plokalne[i+t-1]; //3 przedzial 2h 5 // j+t+1 do n il_spotkan_d+=pzdalne[n]-pzdalne[j+t+1-1]; if (il_spotkan_d+il_spotkan_b>=il_spotkan_wymag){ int il_spotkan_wymag_dom=max(il_spotkan_wymag-il_spotkan_b,0); int il_czas_dom=i-1+(n-(j+t+1)+1); wynik=max(wynik,il_czas_dom-il_spotkan_wymag_dom); } } } cout<<wynik<<"\n"; return 0; } |
English