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
#include <iostream>
#include <vector>

using namespace std;
vector<unsigned long long int> tablica;

void zamien(int pierwsza_liczba, int ile_liczb) {
    for (int i = 0; i < ile_liczb; ++i) {
        iter_swap(tablica.begin() + pierwsza_liczba + i, tablica.begin() + pierwsza_liczba + ile_liczb + i);

    }
}
unsigned long long int karty1;
int potasuj(int karty, unsigned long long int i) {
    if (karty1 == karty) { //pierwsze tasowanie
        zamien(0,karty);
        return potasuj(karty /= 2, i * 2);
    }
    else if (karty == 0) {
        return 0;
    } else {
        for (unsigned long long int j = 0; j < i; ++j) {
            zamien(0 + karty * j, karty); //tasowanie 1 polowy
            zamien(0 + karty * j + karty, karty);//tasowanie 2 polowy 
        }
        return potasuj(karty /= 2, i * 2);
    }
}

int main() {
    std::ios::sync_with_stdio(false);
    unsigned long long int karty, tasowania;
    cin >> karty >> tasowania;
    for (int i = 0; i < karty * 2; ++i) {
        unsigned long long int number;
        cin >> number;
        tablica.push_back(number);
    }
    karty1 = karty;
    for (unsigned long long int i = 0; i < tasowania; ++i) {
        potasuj(karty, 1);
    }
    for (int i = 0; i < karty * 2; ++i) {
        cout << tablica.at(i) <<" ";
    }
    return 0;
}