Submission #247142

# Submission time Handle Problem Language Result Execution time Memory
247142 2020-07-11T06:42:54 Z oolimry Lokahian Relics (FXCUP4_lokahia) C++17
0 / 100
1000 ms 640 KB
#include "lokahia.h"
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> ii;

int p[205];
int sz[205];

int findSet(int u){
	if(u == p[u]) return u;
	else return findSet(p[u]);
}

int SZ(int u){ return sz[findSet(u)]; }

void unionSet(int u, int P){
	u = findSet(u), P = findSet(P);
	p[u] = P;
	sz[P] += sz[u];
}

int FindBase(int N){
	srand(time(NULL));
	vector<int> v;
	
	for(int i = 0;i < N;i++) v.push_back(i);
	
	for(int i = 0;i < N;i++){
		p[i] = i;
		sz[i] = 1;
	}
	
	int cnt = 0;
	while(cnt < 600){
		int sz = v.size();
		int i = rand() % (sz);
		int j = rand() % (sz);
		if(i > j) swap(i,j);
		if(i == j) continue;
		
		int a = v[i], b = v[j];
		if(findSet(a) == findSet(b)) assert(false);
		int x = CollectRelics(a, b);
		cnt++;
		if(x == -1) continue;
		
		vector<int> nxt;
		for(int k : v){
			if(k != a && k != b) nxt.push_back(k);
		}
		
		if(x == a || x == b) nxt.push_back(x);
		v = nxt;
		nxt.clear();
		
		if(a != x) unionSet(a,x);
		if(b != x) unionSet(b,x);
		if(SZ(x) > (N/2)){
			//cout << x << "\n";
			return x;
		}
		
	}
	
	//assert(false);
	return -1;
}
# Verdict Execution time Memory Grader output
1 Correct 5 ms 640 KB Correct : C = 219
2 Partially correct 5 ms 512 KB Partially correct : C = 600
3 Correct 5 ms 512 KB Correct : C = 171
4 Correct 6 ms 640 KB Correct : C = 189
5 Correct 5 ms 512 KB Correct : C = 2
6 Correct 7 ms 640 KB Correct : C = 50
7 Partially correct 5 ms 512 KB Partially correct : C = 600
8 Incorrect 6 ms 640 KB Wrong
9 Correct 5 ms 512 KB Correct : C = 124
10 Partially correct 5 ms 640 KB Partially correct : C = 600
11 Partially correct 5 ms 640 KB Partially correct : C = 600
12 Correct 5 ms 512 KB Correct : C = 31
13 Partially correct 5 ms 512 KB Partially correct : C = 600
14 Partially correct 5 ms 640 KB Partially correct : C = 436
15 Incorrect 5 ms 640 KB Wrong
16 Partially correct 5 ms 512 KB Partially correct : C = 600
17 Partially correct 6 ms 640 KB Partially correct : C = 600
18 Partially correct 6 ms 640 KB Partially correct : C = 600
19 Partially correct 5 ms 640 KB Partially correct : C = 600
20 Correct 5 ms 512 KB Correct : C = 30
21 Correct 5 ms 640 KB Correct : C = 50
22 Execution timed out 1093 ms 512 KB Time limit exceeded
23 Partially correct 5 ms 640 KB Partially correct : C = 600
24 Partially correct 5 ms 640 KB Partially correct : C = 494
25 Partially correct 5 ms 512 KB Partially correct : C = 419
26 Partially correct 5 ms 640 KB Partially correct : C = 414
27 Partially correct 7 ms 640 KB Partially correct : C = 600