#include <bits/stdc++.h> using namespace std; int n, k, t; int rek(string a, int wynik, int i, int kp, int gd){ cout<<a<<"\n"; if(i == n){ if(gd == 2){ return wynik; }else{ for(int j=i; j >= i-t;j--){ // if(a[j] != '3'){ // string b = a; // b[j] = '3'; // return rek(b, wynik-i+j, j, kp+1,gd); // goto lol; // } } return rek(a, wynik-t-1, n, kp,2); lol: cout<<""; } } if(kp > k){ return -1; } int x = a[i] - '0'; //cout<<x; if(x == 3){ return rek(a, wynik+1, i+1,kp,gd); } if(x == 2){ return rek(a, wynik, i+1, kp,gd); } if(x == 1 && gd == 1){ return rek(a, wynik, i+1, kp,gd); } if(x == 1 && gd == 2){ for(int j = i; j >= i-t; j--){ if(a[j] == '3'){ continue; } if(a[j] == '2'){ string b = a; b[j] = '3'; //cout<<b<<"\n"; string c = a; c[i] = '3'; //cout<<c<<"\n"; return max(rek(b, wynik-i+j, j, kp+1,gd), rek(c, wynik+1, i+1, kp+1,gd)); goto loll; } } return rek(a, wynik-t-1, i+1, kp, 1); loll: cout<<""; } return -1; } int main() { int gd = 2; cin>>n>>k>>t; string y; cin>>y; int reks = rek(y, 0, 0, 0, gd); if(reks <= -1){ cout<<-1; }else{ cout<<reks; } }
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 | #include <bits/stdc++.h> using namespace std; int n, k, t; int rek(string a, int wynik, int i, int kp, int gd){ cout<<a<<"\n"; if(i == n){ if(gd == 2){ return wynik; }else{ for(int j=i; j >= i-t;j--){ // if(a[j] != '3'){ // string b = a; // b[j] = '3'; // return rek(b, wynik-i+j, j, kp+1,gd); // goto lol; // } } return rek(a, wynik-t-1, n, kp,2); lol: cout<<""; } } if(kp > k){ return -1; } int x = a[i] - '0'; //cout<<x; if(x == 3){ return rek(a, wynik+1, i+1,kp,gd); } if(x == 2){ return rek(a, wynik, i+1, kp,gd); } if(x == 1 && gd == 1){ return rek(a, wynik, i+1, kp,gd); } if(x == 1 && gd == 2){ for(int j = i; j >= i-t; j--){ if(a[j] == '3'){ continue; } if(a[j] == '2'){ string b = a; b[j] = '3'; //cout<<b<<"\n"; string c = a; c[i] = '3'; //cout<<c<<"\n"; return max(rek(b, wynik-i+j, j, kp+1,gd), rek(c, wynik+1, i+1, kp+1,gd)); goto loll; } } return rek(a, wynik-t-1, i+1, kp, 1); loll: cout<<""; } return -1; } int main() { int gd = 2; cin>>n>>k>>t; string y; cin>>y; int reks = rek(y, 0, 0, 0, gd); if(reks <= -1){ cout<<-1; }else{ cout<<reks; } } |