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