#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; } |
English