제출 #1207879

#제출 시각아이디문제언어결과실행 시간메모리
1207879jasonicThe Collection Game (BOI21_swaps)C++20
51 / 100
2 ms420 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;
int visCalls = 0;

void interact(int i, int j) {
    cerr << "COMPARE+SWAP " << i+1 << ' ' << j+1 << '\n';
    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 fix(int sz) {
    for(int i = 1; i < sz; i <<= 1) { // block size
        // across
        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();

        if(i != 1) for(int j = i/2; j > 0; j >>= 1) {
            for(int k = 0; k*j*2 < n; k++) {
                for(int l = 0; l < j && l + k*j*2 < n; l++) {
                    interact(k*j*2 + l, k*j*2 + l + j);
                }
            }
            visit();
        }
        cerr << '\n';
    }

    if(sz <= 1) return;
}

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;

    fix(betN);

    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...