제출 #1242008

#제출 시각아이디문제언어결과실행 시간메모리
1242008PenguinsAreCuteMemory 2 (JOI16_memory2)C++17
60 / 100
1 ms328 KiB
#include "Memory2_lib.h"
#include <bits/stdc++.h>
using namespace std;
mt19937 rng(69);
void solve(vector<int> nos, vector<int> idx) {
	int n = idx.size() / 2;
	if(n == 1) {
		Answer(idx[0], idx[1], nos[0]);
		return;
	}
	int rnd = rng() % (2 * n);
	int res[2 * n];
	for(int i=0;i<2*n;i++)
		if(i != rnd)
			res[i] = lower_bound(nos.begin(),nos.end(),Flip(idx[i], idx[rnd]))-nos.begin();
	res[rnd] = -1e9;
	int freq[n];
	memset(freq,0,sizeof(freq));
	for(int i=0;i<2*n;i++)
		if(i!=rnd)
			freq[res[i]]++;
	int mn = 0;
	for(int i=0;i<n;i++)
		if(freq[i] & 1)
			mn = i;
	vector<int> nwno, nwpos;
	int ans[n];
	memset(ans,-1,sizeof(ans));
	for(int i=0;i<2*n;i++) {
		if(i==rnd || res[i]==mn)
			nwpos.push_back(idx[i]);
		else if(ans[res[i]] == -1)
			ans[res[i]] = idx[i];
		else
			Answer(idx[i], ans[res[i]], nos[res[i]]);
	}
	for(int i=0;i<n;i++)
		if(ans[i] == -1)
			nwno.push_back(nos[i]);
	solve(nwno, nwpos);
}
void Solve(int T, int N){
	vector<int> v(2*N), u(N);
	iota(v.begin(),v.end(),0);
	iota(u.begin(),u.end(),0);
	solve(u, v);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...