#include "lokahia.h"
#include <bits/stdc++.h>
using namespace std;
const int MN = 205;
mt19937 mt((unsigned)69);
int rng(int l,int r){return (mt()%(r-l+1))+l;}
set<int> elem[MN], bel[MN], adj[MN]; set<pair<int,int>> use;
int ord[MN], a, b;
int FindBase(int N){
if(N==1) return 0;
for(int i=0;i<min(99,N*(N-1)/2);i++){
int x = rng(0,N-1), y = rng(0,N-1);
while(x==y||use.count({x,y})){
x = rng(0,N-1), y =rng(0,N-1);
}
use.insert({x,y});
int rt = CollectRelics(x, y);
if(rt!=-1){
elem[rt].insert(x);
elem[rt].insert(y);
bel[x].insert(rt);
bel[y].insert(rt);
}
else{
adj[x].insert(y);
adj[y].insert(x);
}
}
for(int i=0;i<N;i++) ord[i]=i;
sort(ord,ord+N,[](int i,int j){return elem[i].size()>elem[j].size();});
a=ord[0], b=ord[1];
int Q = min(99,N*(N-1)/2);
int rt = CollectRelics(a,b);
if(rt==-1&&elem[b].size()<Q/4-5) rt=a;
if(rt!=-1){
int cnt = 1;
for(int i=0;i<N;i++){
if(i!=rt&&CollectRelics(rt,i)!=-1) cnt++;
}
if(cnt>(N/2)) return rt;
else return -1;
}
else{
bel[a].insert(a); bel[b].insert(b);
adj[a].insert(b); adj[b].insert(a);
int ca = bel[a].size(), cb = bel[b].size();
for(int i=0;i<N;i++){
int chka=1, chkb=0;
for(auto v : adj[i]){
if(bel[a].count(v)) chka=0;
if(bel[b].count(v)) chkb=0;
}
if(bel[a].count(i)) chka=0;
if(bel[b].count(i)) chkb=0;
if(chka&&CollectRelics(a,i)!=-1) ca++;
if(chkb&&CollectRelics(b,i)!=-1) cb++;
}
if(ca>(N/2)) return a;
else if(cb>(N/2)) return b;
else return -1;
}
}
Compilation message
lokahia.cpp: In function 'int FindBase(int)':
lokahia.cpp:36:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if(rt==-1&&elem[b].size()<Q/4-5) rt=a;
~~~~~~~~~~~~~~^~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
512 KB |
Correct : C = 0 |
2 |
Correct |
5 ms |
640 KB |
Correct : C = 219 |
3 |
Correct |
5 ms |
640 KB |
Correct : C = 219 |
4 |
Correct |
5 ms |
640 KB |
Correct : C = 299 |
5 |
Incorrect |
5 ms |
640 KB |
Wrong |
6 |
Correct |
5 ms |
640 KB |
Correct : C = 299 |
7 |
Correct |
5 ms |
640 KB |
Correct : C = 218 |
8 |
Correct |
5 ms |
640 KB |
Correct : C = 218 |
9 |
Correct |
5 ms |
640 KB |
Correct : C = 298 |
10 |
Correct |
5 ms |
640 KB |
Correct : C = 219 |
11 |
Correct |
5 ms |
768 KB |
Correct : C = 298 |
12 |
Incorrect |
5 ms |
640 KB |
Wrong |
13 |
Correct |
5 ms |
640 KB |
Correct : C = 299 |
14 |
Correct |
5 ms |
640 KB |
Correct : C = 219 |
15 |
Correct |
5 ms |
640 KB |
Correct : C = 298 |
16 |
Correct |
5 ms |
640 KB |
Correct : C = 218 |
17 |
Correct |
5 ms |
640 KB |
Correct : C = 219 |
18 |
Correct |
5 ms |
640 KB |
Correct : C = 298 |
19 |
Correct |
5 ms |
768 KB |
Correct : C = 299 |
20 |
Correct |
5 ms |
640 KB |
Correct : C = 218 |
21 |
Incorrect |
5 ms |
640 KB |
Wrong |
22 |
Correct |
5 ms |
640 KB |
Correct : C = 298 |
23 |
Correct |
5 ms |
640 KB |
Correct : C = 298 |
24 |
Correct |
5 ms |
768 KB |
Correct : C = 299 |
25 |
Correct |
5 ms |
640 KB |
Correct : C = 298 |
26 |
Correct |
5 ms |
640 KB |
Correct : C = 299 |
27 |
Correct |
5 ms |
512 KB |
Correct : C = 15 |