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