#include <iostream> #include <vector> #include <string> #include <cstdlib> #include <ctime> typedef long long ll; using namespace std; inline bool spr1(ll& liczba_1) { if(liczba_1 > 2){ if (((((liczba_1 % 3) % 4) % 5) % 6) == 0) return true; if (((((liczba_1 % 4) % 3) % 5) % 6) == 0) return true; if (((((liczba_1 % 5) % 3) % 4) % 6) == 0) return true; if (((((liczba_1 % 3) % 5) % 4) % 6) == 0) return true; if (((((liczba_1 % 4) % 5) % 3) % 6) == 0) return true; if (((((liczba_1 % 5) % 4) % 3) % 6) == 0) return true; if (((((liczba_1 % 6) % 4) % 3) % 5) == 0) return true; if (((((liczba_1 % 4) % 6) % 3) % 5) == 0) return true; if (((((liczba_1 % 3) % 6) % 4) % 5) == 0) return true; if (((((liczba_1 % 6) % 3) % 4) % 5) == 0) return true; if (((((liczba_1 % 4) % 3) % 6) % 5) == 0) return true; if (((((liczba_1 % 3) % 4) % 6) % 5) == 0) return true; if (((((liczba_1 % 3) % 5) % 6) % 4) == 0) return true; if (((((liczba_1 % 5) % 3) % 6) % 4) == 0) return true; if (((((liczba_1 % 6) % 3) % 5) % 4) == 0) return true; if (((((liczba_1 % 3) % 6) % 5) % 4) == 0) return true; if (((((liczba_1 % 5) % 6) % 3) % 4) == 0) return true; if (((((liczba_1 % 6) % 5) % 3) % 4) == 0) return true; if (((((liczba_1 % 6) % 5) % 4) % 3) == 0) return true; if (((((liczba_1 % 5) % 6) % 4) % 3) == 0) return true; if (((((liczba_1 % 4) % 6) % 5) % 3) == 0) return true; if (((((liczba_1 % 6) % 4) % 5) % 3) == 0) return true; if (((((liczba_1 % 5) % 4) % 6) % 3) == 0) return true; if (((((liczba_1 % 4) % 5) % 6) % 3) == 0) return true; } return false; } inline char losowanie_litery(ll i) { if (i == 6) { char tab_liter[2] = { 'o', 'w'}; return tab_liter[(rand() % 2)]; } if (i == 5) { char tab_liter[9] = { 'g', 'k', 'm', 'n', 's', 'u', 'v', 'y', 'z'}; return tab_liter[(rand() % 9)]; } if (i == 4) { char tab_liter[10] = { 'c', 'e', 'f', 'i', 'j', 'l', 'q', 'r', 't', 'x'}; return tab_liter[(rand() % 10)]; } if (i == 3) { char tab_liter[5] = { 'a', 'b', 'd', 'h', 'p' }; return tab_liter[(rand() % 5)]; } } inline void tab(ll& n, ll& liczba_1, ll tab1[4]){ for (ll i6 = 0; i6 <= n; i6++) { for (ll i5 = 0; i5 <= (n - i6); i5++) { for (ll i4 = 0; i4 <= (n - i6 - i5); i4++) { for (ll i3 = 0; i3 <= (n - i6 - i5 - i4); i3++) { ll x = ((6 * i6) + (5 * i5) + (4 * i4) + (3 * i3)); ll y = (i6 + i5 + i4 + i3); if ((x == liczba_1) && (y == n)) { tab1[0] = i6; tab1[1] = i5; tab1[2] = i4; tab1[3] = i3; } } } } } } inline string run2(ll& n, ll& liczba_1) { if (spr1(liczba_1)) { ll tab1[4] = { 0,0,0,0 }; string wynik; tab(n, liczba_1, tab1); for (int i = 0; i < 4; i++){ for (ll j = 0; j < tab1[i]; j++) { if (i == 0) { wynik += losowanie_litery(6); } if (i == 1) { wynik += losowanie_litery(5); } if (i == 2) { wynik += losowanie_litery(4); } if (i == 3) { wynik += losowanie_litery(3); } } } return wynik; } else { return "NIE"; } } inline ll oblicz_licz_1(ll& n) { ll liczba_1 = 0; for (ll i = 0; i < (8 * n); i++) { char znak; cin >> znak; if (znak == '1') { liczba_1++; } } return liczba_1; } int main() { srand(time(NULL)); ll n; cin >> n; ll liczba_1 = oblicz_licz_1(n); cout << run2(n, liczba_1); 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 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | #include <iostream> #include <vector> #include <string> #include <cstdlib> #include <ctime> typedef long long ll; using namespace std; inline bool spr1(ll& liczba_1) { if(liczba_1 > 2){ if (((((liczba_1 % 3) % 4) % 5) % 6) == 0) return true; if (((((liczba_1 % 4) % 3) % 5) % 6) == 0) return true; if (((((liczba_1 % 5) % 3) % 4) % 6) == 0) return true; if (((((liczba_1 % 3) % 5) % 4) % 6) == 0) return true; if (((((liczba_1 % 4) % 5) % 3) % 6) == 0) return true; if (((((liczba_1 % 5) % 4) % 3) % 6) == 0) return true; if (((((liczba_1 % 6) % 4) % 3) % 5) == 0) return true; if (((((liczba_1 % 4) % 6) % 3) % 5) == 0) return true; if (((((liczba_1 % 3) % 6) % 4) % 5) == 0) return true; if (((((liczba_1 % 6) % 3) % 4) % 5) == 0) return true; if (((((liczba_1 % 4) % 3) % 6) % 5) == 0) return true; if (((((liczba_1 % 3) % 4) % 6) % 5) == 0) return true; if (((((liczba_1 % 3) % 5) % 6) % 4) == 0) return true; if (((((liczba_1 % 5) % 3) % 6) % 4) == 0) return true; if (((((liczba_1 % 6) % 3) % 5) % 4) == 0) return true; if (((((liczba_1 % 3) % 6) % 5) % 4) == 0) return true; if (((((liczba_1 % 5) % 6) % 3) % 4) == 0) return true; if (((((liczba_1 % 6) % 5) % 3) % 4) == 0) return true; if (((((liczba_1 % 6) % 5) % 4) % 3) == 0) return true; if (((((liczba_1 % 5) % 6) % 4) % 3) == 0) return true; if (((((liczba_1 % 4) % 6) % 5) % 3) == 0) return true; if (((((liczba_1 % 6) % 4) % 5) % 3) == 0) return true; if (((((liczba_1 % 5) % 4) % 6) % 3) == 0) return true; if (((((liczba_1 % 4) % 5) % 6) % 3) == 0) return true; } return false; } inline char losowanie_litery(ll i) { if (i == 6) { char tab_liter[2] = { 'o', 'w'}; return tab_liter[(rand() % 2)]; } if (i == 5) { char tab_liter[9] = { 'g', 'k', 'm', 'n', 's', 'u', 'v', 'y', 'z'}; return tab_liter[(rand() % 9)]; } if (i == 4) { char tab_liter[10] = { 'c', 'e', 'f', 'i', 'j', 'l', 'q', 'r', 't', 'x'}; return tab_liter[(rand() % 10)]; } if (i == 3) { char tab_liter[5] = { 'a', 'b', 'd', 'h', 'p' }; return tab_liter[(rand() % 5)]; } } inline void tab(ll& n, ll& liczba_1, ll tab1[4]){ for (ll i6 = 0; i6 <= n; i6++) { for (ll i5 = 0; i5 <= (n - i6); i5++) { for (ll i4 = 0; i4 <= (n - i6 - i5); i4++) { for (ll i3 = 0; i3 <= (n - i6 - i5 - i4); i3++) { ll x = ((6 * i6) + (5 * i5) + (4 * i4) + (3 * i3)); ll y = (i6 + i5 + i4 + i3); if ((x == liczba_1) && (y == n)) { tab1[0] = i6; tab1[1] = i5; tab1[2] = i4; tab1[3] = i3; } } } } } } inline string run2(ll& n, ll& liczba_1) { if (spr1(liczba_1)) { ll tab1[4] = { 0,0,0,0 }; string wynik; tab(n, liczba_1, tab1); for (int i = 0; i < 4; i++){ for (ll j = 0; j < tab1[i]; j++) { if (i == 0) { wynik += losowanie_litery(6); } if (i == 1) { wynik += losowanie_litery(5); } if (i == 2) { wynik += losowanie_litery(4); } if (i == 3) { wynik += losowanie_litery(3); } } } return wynik; } else { return "NIE"; } } inline ll oblicz_licz_1(ll& n) { ll liczba_1 = 0; for (ll i = 0; i < (8 * n); i++) { char znak; cin >> znak; if (znak == '1') { liczba_1++; } } return liczba_1; } int main() { srand(time(NULL)); ll n; cin >> n; ll liczba_1 = oblicz_licz_1(n); cout << run2(n, liczba_1); return 0;} |