#include<cstdio>
#include<vector>
int pos = 0;
int reversed[1048576];
int pow(int x) {
if (x == 1) return 2;
int xx = pow(x / 2);
xx = xx * xx;
return x % 2 == 0 ? xx : xx * x;
}
void generate_reversed(int* start, int* end) {
if (start + 1 == end) {
reversed[pos++] = *end;
reversed[pos++] = *start;
} else {
int* middle = start + ((end - start + 1) / 2) - 1;
generate_reversed(middle + 1, end);
generate_reversed(start, middle);
}
}
int main() {
int numbers[1048576];
int n, t;
scanf("%d %d", &n, &t);
int len = pow(n);
for (int i = 0; i < len; ++i) {
scanf("%d", &numbers[i]);
}
if (t % 2 == 1) {
generate_reversed(&numbers[0], &numbers[len - 1]);
printf("%d", reversed[0]);
for (int i = 1; i < len; ++i) {
printf(" %d", reversed[i]);
}
printf("\n");
} else {
printf("%d", numbers[0]);
for (int i = 1; i < len; ++i) {
printf(" %d", numbers[i]);
}
printf("\n");
}
}
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 | #include<cstdio> #include<vector> int pos = 0; int reversed[1048576]; int pow(int x) { if (x == 1) return 2; int xx = pow(x / 2); xx = xx * xx; return x % 2 == 0 ? xx : xx * x; } void generate_reversed(int* start, int* end) { if (start + 1 == end) { reversed[pos++] = *end; reversed[pos++] = *start; } else { int* middle = start + ((end - start + 1) / 2) - 1; generate_reversed(middle + 1, end); generate_reversed(start, middle); } } int main() { int numbers[1048576]; int n, t; scanf("%d %d", &n, &t); int len = pow(n); for (int i = 0; i < len; ++i) { scanf("%d", &numbers[i]); } if (t % 2 == 1) { generate_reversed(&numbers[0], &numbers[len - 1]); printf("%d", reversed[0]); for (int i = 1; i < len; ++i) { printf(" %d", reversed[i]); } printf("\n"); } else { printf("%d", numbers[0]); for (int i = 1; i < len; ++i) { printf(" %d", numbers[i]); } printf("\n"); } } |
English