Submission #375423

#TimeUsernameProblemLanguageResultExecution timeMemory
375423SeanliuMeetings (JOI19_meetings)C++14
29 / 100
2321 ms1072 KiB
#include "meetings.h"
#include <iostream>
#include <vector>
using namespace std;

const int maxN = 2e3 + 326;
vector<int> adj[maxN];

int Rand(){
	static int seed = 101;
	return seed = (seed * 3 + 1) % 0xdefaced;
}

void solve(vector<int> vec){
	//cout << "vec = "; for(int x : vec) cout << x << " "; cout << endl;
	if(vec.size() == 1) return;
	if(vec.size() == 2){
		//cout << "Bridging: " << vec[0] << ", " << vec[1] << endl;
		if(vec[0] > vec[1]) swap(vec[0], vec[1]);
		Bridge(vec[0], vec[1]);
		return;
	}
	int cur = vec[1];
	for(int i = 2; i < (int)vec.size(); i++){
		int res = Query(vec[0], cur, vec[i]);
		if(res == vec[i]) cur = res;
	}
	//cout << "Bridging: " << vec[0] << ", " << cur << endl;
	vector<int> l, r;
	l.push_back(vec[0]);
	r.push_back(cur);
	for(int i = 1; i < (int)vec.size(); i++) if(vec[i] != cur){
		int res = Query(vec[0], cur, vec[i]);
		if(res == vec[0]) l.push_back(vec[i]);
		else r.push_back(vec[i]);
	}
	solve(l);
	solve(r);
	if(vec[0] > cur) swap(vec[0], cur);
	Bridge(vec[0], cur);
}

void Solve(int N){
	vector<int> jizz = vector<int>();
	for(int i = 0; i < N; i++) jizz.push_back(i);
	for(int i = 0; i < N; i++) swap(jizz[i], jizz[Rand() % N]);
	solve(jizz);
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...