#include <cstdio>
double get_ratio(int count0, int count1) {
if (count0 > count1) {
return (double) count0/count1;
}
return (double) count1/count0;
}
int main(int argc, char const *argv[]) {
int n;
char* bits;
char mapping[5][5] = {
{'0','0','0','0','0'},
{'0','0','0','0','o'},
{'0','0','0','g','0'},
{'0','0','c','0','0'},
{'0','a','0','0','0'},
};
int count[2] = {0, 0};
scanf("%d", &n);
bits = new char[8*n+100];
scanf("%s", bits);
for (int i = 0; i < n*8; i++) {
count[bits[i] - '0']++;
}
count[0] -= n;
count[1] -= n*2;
double ratio = get_ratio(count[0], count[1]);
if (ratio > 4.0 || count[0] < 0 || count[1] < 0) {
puts("NIE");
return 0;
}
while (count[0] && count[1]) {
char to_delete = count[0] > count[1] ? 0 : 1;
while (count[0] + count[1] > 5 && count[to_delete] >= count[-to_delete + 1]) {
count[to_delete] -= 4;
count[-to_delete + 1] -= 1;
if (to_delete == 0) {
printf("%c", mapping[4][1]);
} else {
printf("%c", mapping[1][4]);
}
}
if (count[0] + count[1] == 5) {
printf("%c", mapping[count[0]][count[1]]);
break;
}
}
puts("");
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 | #include <cstdio> double get_ratio(int count0, int count1) { if (count0 > count1) { return (double) count0/count1; } return (double) count1/count0; } int main(int argc, char const *argv[]) { int n; char* bits; char mapping[5][5] = { {'0','0','0','0','0'}, {'0','0','0','0','o'}, {'0','0','0','g','0'}, {'0','0','c','0','0'}, {'0','a','0','0','0'}, }; int count[2] = {0, 0}; scanf("%d", &n); bits = new char[8*n+100]; scanf("%s", bits); for (int i = 0; i < n*8; i++) { count[bits[i] - '0']++; } count[0] -= n; count[1] -= n*2; double ratio = get_ratio(count[0], count[1]); if (ratio > 4.0 || count[0] < 0 || count[1] < 0) { puts("NIE"); return 0; } while (count[0] && count[1]) { char to_delete = count[0] > count[1] ? 0 : 1; while (count[0] + count[1] > 5 && count[to_delete] >= count[-to_delete + 1]) { count[to_delete] -= 4; count[-to_delete + 1] -= 1; if (to_delete == 0) { printf("%c", mapping[4][1]); } else { printf("%c", mapping[1][4]); } } if (count[0] + count[1] == 5) { printf("%c", mapping[count[0]][count[1]]); break; } } puts(""); return 0; } |
English