#include <bits/stdc++.h> #define FOR(i,b,e) for(int i=(b); i <= (e); ++i) #define FORD(i,b,e) for(int i=(b); i >= (e); --i) #define SIZE(c) (int) (c).size() #define FORE(i,c) FOR(i,0,SIZE(c)-1) #define FORDE(i,c) FORD(i,SIZE(c)-1,0) #define pb push_back #define mp make_pair #define st first #define nd second using namespace std; typedef long long ll; typedef pair <int,int> pii; typedef pair <ll,ll> pll; typedef vector <int> VI; typedef vector <bool> VB; typedef vector <pii> VP; typedef vector <ll> VL; typedef vector <pll> VPL; typedef vector <VI> VVI; typedef vector <VL> VVL; typedef vector <VB> VVB; typedef vector <VP> VVP; const int MOD = 1000000007; const int INF = 1000000001; const ll LINF = 1000000000000000001LL; /*************************************************************************/ int main() { int n, t; scanf("%d%d", &n, &t); int N = 1 << n; VI tab(N); FOR(i,0,N-1) { scanf("%d", &tab[i]); } if (t % 2) { FOR(i,0,N-1) { int j = i ^ (N - 1); if (i < j) { swap(tab[i], tab[j]); } } } FOR(i,0,N-1) { printf("%d ", tab[i]); } return 0; } /*************************************************************************/
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 | #include <bits/stdc++.h> #define FOR(i,b,e) for(int i=(b); i <= (e); ++i) #define FORD(i,b,e) for(int i=(b); i >= (e); --i) #define SIZE(c) (int) (c).size() #define FORE(i,c) FOR(i,0,SIZE(c)-1) #define FORDE(i,c) FORD(i,SIZE(c)-1,0) #define pb push_back #define mp make_pair #define st first #define nd second using namespace std; typedef long long ll; typedef pair <int,int> pii; typedef pair <ll,ll> pll; typedef vector <int> VI; typedef vector <bool> VB; typedef vector <pii> VP; typedef vector <ll> VL; typedef vector <pll> VPL; typedef vector <VI> VVI; typedef vector <VL> VVL; typedef vector <VB> VVB; typedef vector <VP> VVP; const int MOD = 1000000007; const int INF = 1000000001; const ll LINF = 1000000000000000001LL; /*************************************************************************/ int main() { int n, t; scanf("%d%d", &n, &t); int N = 1 << n; VI tab(N); FOR(i,0,N-1) { scanf("%d", &tab[i]); } if (t % 2) { FOR(i,0,N-1) { int j = i ^ (N - 1); if (i < j) { swap(tab[i], tab[j]); } } } FOR(i,0,N-1) { printf("%d ", tab[i]); } return 0; } /*************************************************************************/ |