Submission #375320

#TimeUsernameProblemLanguageResultExecution timeMemory
375320casperwangMeetings (JOI19_meetings)C++14
29 / 100
2137 ms1004 KiB
#include "meetings.h"
#define All(x) x.begin(), x.end()
#define pb push_back
#include <bits/stdc++.h>
using namespace std;
#define debug(args...) kout("[ " + string(#args) + " ]", args)
void kout() { cerr << endl; }
template <class T, class ...U> void kout(T a, U ...b) { cerr << a << ' ',kout(b...); }
template <class T> void pary(T L, T R) { while (L != R) cerr << *L << " \n"[++L==R]; }

void solve_set(vector <int> V) {
	srand(time(NULL));
	random_shuffle(All(V));
	set <int> R;
	vector <int> V2;
	for (int i : V) R.insert(i);
	int m = Query(V[0], V[1], V[2]);
	if (V.size() == 3) {
		for (int i = 0; i < 3; i++) {
			if (m != V[i]) {
				Bridge(min(m, V[i]), max(m, V[i]));
			}
		}
		return;
	}
	for (int i = 0; i < 3; i++) {
		if (m == V[i]) continue;
		vector <int> A, B;
		R.erase(V[i]);
		for (int j : V) {
			if (j == V[i] || j == m) continue;
			int d = Query(m, V[i], j);
			if (d == V[i])
				B.pb(j), R.erase(j);
			else if (d != m)
				A.pb(j), R.erase(j);
		}
		if (A.size() == 0) {
			Bridge(min(m, V[i]), max(m, V[i]));
		} else if (A.size() == 1) {
			Bridge(min(A[0], m), max(A[0], m));
			Bridge(min(A[0], V[i]), max(A[0], V[i]));
		} else if (A.size() >= 2) {
			A.pb(m);
			A.pb(V[i]);
			solve_set(A);
		}
		if (B.size() == 1) {
			Bridge(min(B[0], V[i]), max(B[0], V[i]));
		} else if (B.size() >= 2) {
			B.pb(V[i]);
			solve_set(B);
		}
	}
	for (int i : R) V2.pb(i);
	if (V2.size() == 2) {
		Bridge(min(V2[0], V2[1]), max(V2[0], V2[1]));
	} else if (V2.size() >= 3) {
		solve_set(V2);
	}
}

void Solve(int N) {
	vector <int> arr;
	for (int i = 0; i < N; i++) arr.pb(i);
	solve_set(arr);
	return;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...