#include <bits/stdc++.h> using namespace std; string ciag; int jedynki_w_ciagu; int n; int jakie_min; int jakie_max; char literki[10]; int ile_liczb_rozbic; vector <int> rozbicie; string slowo; void ile_jedynek_w_ciagu(){ for(int i=0; i<ciag.size(); ++i){ if(ciag[i]=='1'){ ++jedynki_w_ciagu; } } return; } int znajdz_min(int k){ // funkcja zwraca wartosc z ilu liczb najmniej mozna utworzyc dana liczbe dla podanego argumentu if(k%6 != 0){ // dodajemy 1 jakie_min=(k/6)+1; } if(k%6 == 0) {// nie doddajemy 1 jakie_min=k/6; } return jakie_min; } int znajdz_max(int k){ // funkcja zwraca wartosc z ilu liczb najwiecej mozna utworzyc dana liczbe dla podanego argumentu jakie_max=k/3; return jakie_max; } void rozbijanie_liczby(){ // rozbijanie liczby (jedynki w ciagu) na sume, tak aby powstaly a lub c lub lub g lub w int x=jedynki_w_ciagu; int w=x%6; while (x>5){ rozbicie.push_back(6); x=x-6; } rozbicie.push_back(w); return; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; cin >> ciag; literki[3]='a'; literki[4]='c'; literki[5]='g'; literki[6]='w'; //ciag="1011111010101100011011011010001010100011111111110001001001011010"; ile_jedynek_w_ciagu(); if(n>znajdz_max(jedynki_w_ciagu) ){ cout << "NIE\n"; return 0; } if(n<znajdz_min(jedynki_w_ciagu) ){ cout << "NIE\n"; return 0; } ile_liczb_rozbic=n-jakie_min; rozbijanie_liczby();//rozbijanie liczby "jedynki w ciagu" if(ile_liczb_rozbic!=0){ for(int i=0; i<ile_liczb_rozbic; ++i){ if(rozbicie[i] == 6){ rozbicie.erase( rozbicie.begin() ); rozbicie.push_back(3); rozbicie.push_back(3); } } } for(int i=0; i<rozbicie.size(); ++i){ if(rozbicie[i]!=0){ slowo+=literki[rozbicie[i]]; } } // debug /* for(int i=0; i<rozbicie.size(); ++i){ cout << rozbicie[i] << " "; } */ cout << slowo << "\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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | #include <bits/stdc++.h> using namespace std; string ciag; int jedynki_w_ciagu; int n; int jakie_min; int jakie_max; char literki[10]; int ile_liczb_rozbic; vector <int> rozbicie; string slowo; void ile_jedynek_w_ciagu(){ for(int i=0; i<ciag.size(); ++i){ if(ciag[i]=='1'){ ++jedynki_w_ciagu; } } return; } int znajdz_min(int k){ // funkcja zwraca wartosc z ilu liczb najmniej mozna utworzyc dana liczbe dla podanego argumentu if(k%6 != 0){ // dodajemy 1 jakie_min=(k/6)+1; } if(k%6 == 0) {// nie doddajemy 1 jakie_min=k/6; } return jakie_min; } int znajdz_max(int k){ // funkcja zwraca wartosc z ilu liczb najwiecej mozna utworzyc dana liczbe dla podanego argumentu jakie_max=k/3; return jakie_max; } void rozbijanie_liczby(){ // rozbijanie liczby (jedynki w ciagu) na sume, tak aby powstaly a lub c lub lub g lub w int x=jedynki_w_ciagu; int w=x%6; while (x>5){ rozbicie.push_back(6); x=x-6; } rozbicie.push_back(w); return; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; cin >> ciag; literki[3]='a'; literki[4]='c'; literki[5]='g'; literki[6]='w'; //ciag="1011111010101100011011011010001010100011111111110001001001011010"; ile_jedynek_w_ciagu(); if(n>znajdz_max(jedynki_w_ciagu) ){ cout << "NIE\n"; return 0; } if(n<znajdz_min(jedynki_w_ciagu) ){ cout << "NIE\n"; return 0; } ile_liczb_rozbic=n-jakie_min; rozbijanie_liczby();//rozbijanie liczby "jedynki w ciagu" if(ile_liczb_rozbic!=0){ for(int i=0; i<ile_liczb_rozbic; ++i){ if(rozbicie[i] == 6){ rozbicie.erase( rozbicie.begin() ); rozbicie.push_back(3); rozbicie.push_back(3); } } } for(int i=0; i<rozbicie.size(); ++i){ if(rozbicie[i]!=0){ slowo+=literki[rozbicie[i]]; } } // debug /* for(int i=0; i<rozbicie.size(); ++i){ cout << rozbicie[i] << " "; } */ cout << slowo << "\n"; return 0; } |