Submission #1204084

#TimeUsernameProblemLanguageResultExecution timeMemory
1204084Muhammad_AneeqPark (JOI17_park)C++20
10 / 100
147 ms32840 KiB
#include "park.h" #include <vector> #include <map> #include <iostream> using namespace std; static int Place[1400]; int Deg[1400]={}; int query(int u,int v) { Place[u]=Place[v]=1; if (u>v) swap(u,v); int z=Ask(u,v,Place); Place[u]=Place[v]=0; return z; } map<int,int>vis; int n; map<pair<int,int>,bool>done,ed; int sg(int u,int v) { if (u>v) swap(u,v); if (ed.find({u,v})==ed.end()) ed[{u,v}]=query(u,v); return ed[{u,v}]; } void rec(int u,int v) { if (vis[v]) return; if (sg(u,v)) { vis[v]=1; if (u>v) swap(u,v); if (done[{u,v}]) return; done[{u,v}]=1; Deg[u]++; Deg[v]++; Answer(u,v);return; } vector<int>nodes; for (int i=0;i<n;i++) { if (i==u||i==v||Deg[i]==7) continue; nodes.push_back(i); } if (nodes.size()==0) { Answer(min(u,v),max(u,v));return; } int st=-1,en=nodes.size()-1; while (st+1<en) { int mid=(st+en)/2; for (int i=0;i<=mid;i++) Place[nodes[i]]=1; if (query(u,v)) en=mid; else st=mid; for (int i=0;i<=mid;i++) Place[nodes[i]]=0; } rec(u,nodes[en]);rec(nodes[en],v); } void Detect(int T, int N) { n=N; if (N==2) { Answer(0,1);return; } for (int i=0;i<N;i++) Deg[i]=0; for (int i=1;i<N;i++) rec(0,i); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...