Submission #1295213

#TimeUsernameProblemLanguageResultExecution timeMemory
1295213faricaThe Collection Game (BOI21_swaps)C++20
0 / 100
1 ms332 KiB
#include <bits/stdc++.h>
#include "swaps.h"

using namespace std;
using vi = vector<int>;
using pi = pair<int,int>;

int inc(int a, int b, int n) {
	if(a+b == n-1) return n-1;
	return (a+b)%(n-1);
}

void recSort(int n, vi &v) {
	if(n == 1) return;
	if(n == 2) {
		schedule(v[0], v[1]);
		vi tmp = visit();
		return;
	} 
	vi a,b;
	for(int i=0; i<n; ++i) {
		if(i<n/2) a.push_back(v[i]);
		else b.push_back(v[i]);
	}
	recSort((int)a.size(), a);
	recSort((int)b.size(), b);
	int tmp = log2(n)+1;
	for(int g=(1<<tmp); g>=1; g/=2) {
		vector<bool>vis(n,0);
		for(int j=0; j<n; ++j) {
			int x = inc(j, g, n);
			if(vis[x] or vis[j] or x == j) continue;
			vis[x] = vis[j] = 1;
			schedule(min(v[j],v[x]), max(v[j],v[x]));
		}
		vi tmp2 = visit();
		vis.assign(n, 0);
		for(int j=inc(0,g,n); j<n; ++j) {
			int x = inc(j, g, n);
			if(vis[x] or vis[j] or x == j) continue;
			vis[x] = vis[j] = 1;
			schedule(min(v[j],v[x]), max(v[j],v[x]));
		}
		for(int j=0; j<inc(0,g,n); ++j) {
			int x = inc(j, g, n);
			if(vis[x] or vis[j] or x == j) continue;
			vis[x] = vis[j] = 1;
			schedule(min(v[j],v[x]), max(v[j],v[x]));
		}
		tmp2 = visit();
	}
}

void solve(int N, int V) {
    vi v;
    for(int i=1; i<=N; ++i) v.push_back(i);
    recSort(N, v);
    reverse(v.begin(), v.end());
    answer(v);
}
#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...