#include <iostream> #include <vector> #include <fstream> std::vector<int> tab; int n, t; int len = 2; void print() { for(size_t i = 0 ; i < tab.size() ; ++i) { std::cout << tab[i] << ' '; } std::cout << std::endl; } void shuffle(size_t a, size_t b) { if( a + 2 < b ) { size_t half = (a + b) / 2; shuffle(a, half); shuffle(half, b); for(size_t i = a, h = 0 ; i < half ; ++i, ++h) { int z = tab[i]; tab[i] = tab[half + h]; tab[half + h] = z; } } else { int z = tab[a]; tab[a] = tab[b-1]; tab[b-1] = z; } //print(); } void read(std::istream & str) { int i; str >> n >> t; if( n > 1 ) len = (2 << (n-1)); tab.reserve(len); for(i = 0 ; i<len ; ++i) { int a; str >> a; tab.push_back(a); } } int main() { read(std::cin); if( (t & 1) == 1 ) shuffle(0, tab.size()); print(); }
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 | #include <iostream> #include <vector> #include <fstream> std::vector<int> tab; int n, t; int len = 2; void print() { for(size_t i = 0 ; i < tab.size() ; ++i) { std::cout << tab[i] << ' '; } std::cout << std::endl; } void shuffle(size_t a, size_t b) { if( a + 2 < b ) { size_t half = (a + b) / 2; shuffle(a, half); shuffle(half, b); for(size_t i = a, h = 0 ; i < half ; ++i, ++h) { int z = tab[i]; tab[i] = tab[half + h]; tab[half + h] = z; } } else { int z = tab[a]; tab[a] = tab[b-1]; tab[b-1] = z; } //print(); } void read(std::istream & str) { int i; str >> n >> t; if( n > 1 ) len = (2 << (n-1)); tab.reserve(len); for(i = 0 ; i<len ; ++i) { int a; str >> a; tab.push_back(a); } } int main() { read(std::cin); if( (t & 1) == 1 ) shuffle(0, tab.size()); print(); } |