#include <cstdio> #include <cstring> #define scanf(...) scanf(__VA_ARGS__)?:0 char s[800005]; int n, ilejeden, min = 8, maks = 0; int ilemin, ilemaks; void wypisz(int ile, int wartosc) { char co = 'a'; while (__builtin_popcount(co) != wartosc) co++; memset(s, co, ile); s[ile] = 0; printf("%s", s); } int main() { for (int i = 'a'; i <= 'z'; i++) { int x = __builtin_popcount(i); if (x < min) min = x; if (x > maks) maks = x; } scanf("%d\n%s", &n, s); for (int i = 0; i < 8*n; i++) { if (s[i] == '1') ilejeden++; } if (ilejeden < min * n || ilejeden > maks * n) { puts("NIE"); return 0; } ilejeden -= min * n; ilemaks = ilejeden / (maks - min); int bonus = ilejeden % (maks - min); wypisz(ilemaks, maks); if (bonus == 0) wypisz(n - ilemaks, min); else { wypisz(n - ilemaks - 1, min); wypisz(1, min + bonus); } puts(""); }
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 | #include <cstdio> #include <cstring> #define scanf(...) scanf(__VA_ARGS__)?:0 char s[800005]; int n, ilejeden, min = 8, maks = 0; int ilemin, ilemaks; void wypisz(int ile, int wartosc) { char co = 'a'; while (__builtin_popcount(co) != wartosc) co++; memset(s, co, ile); s[ile] = 0; printf("%s", s); } int main() { for (int i = 'a'; i <= 'z'; i++) { int x = __builtin_popcount(i); if (x < min) min = x; if (x > maks) maks = x; } scanf("%d\n%s", &n, s); for (int i = 0; i < 8*n; i++) { if (s[i] == '1') ilejeden++; } if (ilejeden < min * n || ilejeden > maks * n) { puts("NIE"); return 0; } ilejeden -= min * n; ilemaks = ilejeden / (maks - min); int bonus = ilejeden % (maks - min); wypisz(ilemaks, maks); if (bonus == 0) wypisz(n - ilemaks, min); else { wypisz(n - ilemaks - 1, min); wypisz(1, min + bonus); } puts(""); } |