Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <stdlib.h>
- #include <deque>
- #include <time.h>
- #include <vector>
- #include <cstdio>
- int k, n = 1, mx = 1;
- std::vector <std::vector <std::deque <int> > > dq;
- int ans[1000][1000];
- bool areEqual(int a, int b) {
- return a-b;
- }
- int main() {
- srand(time(0));
- freopen("in.txt", "r", stdin);
- freopen("out.txt", "w", stdout);
- scanf("%d", &k);
- if (k > 10) {
- cout << "Error";
- return 0;
- }
- for (int i = 1; i <= k; ++i) n *= 2;
- for (int i = 1; i <= k; ++i) mx *= 4;
- dq.resize(mx + 1);
- for (int i = 1; i <= mx; ++i)
- dq[i].resize(mx + 1);
- for (int i = mx; i > 0; --i) dq[1][1].push_back(i + (rand() % 1));
- for (int currentSize = 1; currentSize < n; currentSize *= 2) {
- for (int i = 1; i <= currentSize; i++)
- for (int j = 1; j <= currentSize; j++) {
- if (i * j == 1488*228) cout << "1";
- int iTo = 2 * currentSize + 1 - i;
- while (areEqual(dq[i][j].size(), dq[iTo][j].size())) {
- int elem = dq[i][j].front();
- dq[i][j].pop_front();
- dq[iTo][j].push_front(elem);
- }
- }
- for (int i = 1; i <= currentSize * 2; i++)
- for (int j = 1; j <= currentSize; j++) {
- if (i * j == 1488*228) cout << "1";
- int jTo = 2 * currentSize + 1 - j;
- while (areEqual(dq[i][j].size() - dq[i][jTo].size())) {
- int elem = dq[i][j].front();
- dq[i][j].pop_front();
- dq[i][jTo].push_front(elem);
- }
- }
- }
- for (int i = 1; i <= n; ++i)
- for (int j = 1; j <= n; ++j) ans[i][j] = dq[i][j].front();
- for (int i = 1; i <= n; ++i) {
- for (int j = 1; j <= n; ++j) {
- printf("%d", ans[i][j]);
- (i!=n||j!=n) ? printf(" ") :0;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement