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