Submission #147842

#TimeUsernameProblemLanguageResultExecution timeMemory
147842imsifileLokahian Relics (FXCUP4_lokahia)C++17
100 / 100
8 ms976 KiB
#include "lokahia.h" #include <vector> using namespace std; vector<int> my[202], adv[202]; int gcn, res[202][202], cnts[202]; int comp(int x, int y){ if(res[x][y]==-2) return res[x][y]=res[y][x]=CollectRelics(x,y); return res[x][y]; } int FindBase(int N){ for(int i=0; i<N; i++){ for(int j=0; j<N; j++) res[i][j]=-2; } my[gcn].push_back(0); for(int i=1; i<N; i++){ int d = comp(my[gcn][0], i); if(d<0) adv[gcn].push_back(i); else my[gcn].push_back(i); if(my[gcn].size() == adv[gcn].size()){ i++, gcn++; if(i==N) return -1; my[gcn].push_back(i); } } int myt=my[gcn].size(); for(int i=0; i<gcn; i++){ if(comp(my[i][0], my[gcn][0]) < 0){ for(auto &x: adv[i]){ int d = comp(x, my[gcn][0]); if(d>=0) myt++, cnts[d]++; } } else{ for(auto &x: my[i]){ int d = comp(x, my[gcn][0]); if(d>=0) myt++, cnts[d]++; } } } for(auto &x: my[gcn]){ if(x==my[gcn][0]) continue; cnts[comp(x, my[gcn][0])]++; } if(myt <= N/2) return -1; int mx=-1, mxi=0; for(int i=0; i<N; i++){ if(cnts[i]>mx) mx=cnts[i], mxi=i; } return mxi; }
#Verdict Execution timeMemoryGrader output
Fetching results...