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
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <memory.h>

using namespace std;

int main(int argc, char* argv[])
{
   long shufflings = 0L;
   long mask = 1L;
   long cards = 1L;
   long expn = 0L;

   scanf("%ld %ld\n", &expn, &shufflings);

   bool swapped = (shufflings & mask) > 0L;
   cards <<= expn;

   long  remain = cards;
   long* deck   = new long[cards];
   //memset(deck, 0, cards * sizeof(long));

   long* currcard = deck;

   if(swapped)
   {
      currcard += cards - 1;
      while(remain--)
      {
         scanf("%ld", currcard);
         --currcard;
      }

   }
   else
   {
      while(remain--)
      {
         scanf("%ld", currcard);
         ++currcard;
      }
   }

   currcard = deck;
   while(cards--)
   {
      printf("%ld ", *currcard);
      ++currcard;
   }

   printf("\n");
   return 0;
}