제출 #1207865

#제출 시각아이디문제언어결과실행 시간메모리
1207865jasonicThe Collection Game (BOI21_swaps)C++20
0 / 100
0 ms408 KiB
#include "swaps.h"
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define fastIO cin.tie(0); ios::sync_with_stdio(false)
#define cerr if(0) cerr

vector<int> a;
int n;

void interact(int i, int j) {
    if(i >= n || j >= n) return;
    schedule(i+1, j+1);
}

int lg2(int n) {
    int res = 0;
    while(n != 1) {n>>=1; res++;}
    return res;
}

void solve(int N, int v) {
    n = N;
    int betN = 1<<lg2(n);
    if(betN < n) betN *= 2;

    a = vector<int>(n);

    for(int i = 0; i < n; i++) a[i] = i+1;

    for(int i = 1; i < betN; i <<= 1) { // block size

        cerr << i << '\n';

        // across
        cerr << "across\n";
        for(int j = 0; j*i*2 < n; j += 1) {
            for(int k = 0; k < i && k + j*i*2 < n; k++) {
                interact(j*i*2 + i - k - 1, k + j*i*2 + i);
            }
        }
        visit();

        // fix subs
        
        if(i != 1) {
            cerr << "fix subs\n";
            for(int j = 1; j < i; j <<= 1) { // gap size
                cerr << j << '\n';
                cerr << "fix miniacross\n";
                for(int k = 0; k*j*2 < n; k += 1) { // gap jumps
                    for(int l = 0; l < j && l + k*j*2 < n; l++) { // blocks
                        interact(k*j*2 + j - l - 1, l + k*j*2 + j);
                    }
                }
                visit();
            }

            for(int j = i/2; j >= 1; j >>= 1) { // gap size
                cerr << j << '\n';
                cerr << "fix miniacross\n";
                for(int k = 0; k*j*2 < n; k += 1) { // gap jumps
                    for(int l = 0; l < j && l + k*j*2 < n; l++) { // blocks
                        interact(k*j*2 + j - l - 1, l + k*j*2 + j);
                    }
                }
                visit();
            }
        }
    }

    answer(a);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...