Submission #247172

#TimeUsernameProblemLanguageResultExecution timeMemory
247172errorgornLokahian Relics (FXCUP4_lokahia)C++17
100 / 100
6 ms896 KiB
#include <bits/stdc++.h> #include "lokahia.h" using namespace std; #define ll long long #define fi first #define se second #define rep(x,s,e) for (auto x=s-(s>e);x!=e-(s>e);(s<e?x++:x--)) #define all(x) (x).begin(),(x).end() #define sz(x) (int)(x).size() mt19937 rng (177013); const int trial=10; //test different startings const int samples=7; //test different random places const int pass=4; int counter=0; int memo[205][205]; int get(int i,int j){ if (memo[i][j]!=-1) return memo[i][j]; counter++; if (counter>=300) return -1; //scam.jpg return memo[i][j]=memo[j][i]=CollectRelics(i,j); } vector<int> shuf(vector<int> v){ rep(x,0,sz(v)){ swap(v[x],v[rng()%(x+1)]); } return v; } bool vis[205]; int FindBase(int n){ memset(memo,-1,sizeof(memo)); if (n<=20){ //maybe rep(root,0,n){ int cnt=1; int ans=0; rep(x,0,n) if (x!=root){ int temp=get(root,x); if (temp!=-1) cnt++,ans=max(ans,temp); } if (cnt>n/2) return ans; } return -1; } vector<int> v; rep(x,0,n) v.push_back(x); v=shuf(v); vector<int> cand; rep(x,0,trial){ int node=v[x]; int curr=0; rep(zzz,0,samples){ int temp; do{ temp=rng()%n; } while (temp==node); //cout<<"debug: "<<node<<" "<<temp<<endl; if (get(node,temp)!=-1) curr++; } if (curr>=pass){ cand.push_back(node); } } for (auto &it:cand){ if (vis[it]) continue; vis[it]=true; int cnt=1; int ans=-1; rep(x,0,n) if (!vis[x]){ int temp=get(it,x); if (temp!=-1){ ans=max(ans,temp); cnt++; vis[x]=true; } } //cout<<it<<" "<<cnt<<" "<<ans<<endl; if (cnt>n/2) return ans; } return -1; }
#Verdict Execution timeMemoryGrader output
Fetching results...