Submission #150442

#TimeUsernameProblemLanguageResultExecution timeMemory
1504421 WA = 5 Push Up (#200)Lokahian Relics (FXCUP4_lokahia)C++17
0 / 100
7 ms640 KiB
#include "lokahia.h" #include <stdlib.h> #include <algorithm> #include <stdio.h> using namespace std; int p[706]; int query[706][3]; int find(int a){ if(p[a] < 0) return a; return p[a] = find(p[a]); } int uni(int a, int b){ a = find(a); b = find(b); if(a==b) return 0; p[a] += p[b]; p[b] = a; return -p[a]; } int mysize(int a){ if(p[a] < 0) return -p[a]; return mysize(p[a]); } int FindBase(int N){ srand(234316); int GROUP_IDX = N+1; if(N==1) return 0; for(int i = 0; i < 700; i++){ p[i] = -1; } int GUESS_IDX = 0; while(GUESS_IDX < 400){ int a = 0, b = 0; while(find(a) == find(b)){ a = rand()%N; b = rand()%N; //printf("%d %d %d %d\n",a,b,find(a),find(b)); } int ret = CollectRelics(a,b); //printf("%d %d %d\n",a,b,ret); query[GUESS_IDX][0]=a; query[GUESS_IDX][1]=b; query[GUESS_IDX][2]=ret; if(ret != -1){ uni(a, b); uni(a,ret); int sz = mysize(a); if(sz > N/2){ int ret = -1; for(int i = 0; i < GUESS_IDX; i++){ if(find(query[GUESS_IDX][0]) != find(a) or find(query[GUESS_IDX][1]) != find(a)) continue; ret = max(ret, query[GUESS_IDX][1]); } return ret; } } GUESS_IDX++; } int mxidx = 0; for(int i = 0; i < N; i++){ if(-p[i] > -p[mxidx]) mxidx = i; } int ret = -1; for(int i = 0; i < GUESS_IDX; i++){ if(find(query[GUESS_IDX][0]) != find(mxidx) or find(query[GUESS_IDX][1]) != find(mxidx)) continue; ret = max(ret, query[GUESS_IDX][1]); } int cnt = 1; for(int i = 0; i < N; i++){ if(i==ret) continue; if(CollectRelics(i,ret) != -1) cnt++; } if(cnt > N/2) return ret; else return -1; }

Compilation message (stderr)

lokahia.cpp: In function 'int FindBase(int)':
lokahia.cpp:29:7: warning: unused variable 'GROUP_IDX' [-Wunused-variable]
   int GROUP_IDX = N+1;
       ^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...