#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; } /*************************************************************************/ |
English