#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; }
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; } |