Submission #320644

#TimeUsernameProblemLanguageResultExecution timeMemory
320644arnold518Park (JOI17_park)C++14
27 / 100
414 ms1356 KiB
#include "park.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int MAXN = 1500; int T, N; int P[MAXN+10]; int query(int A, int B) { if(A>B) swap(A, B); //printf("QUERY %d %d\n", A, B); //for(int i=0; i<N; i++) printf("%d ", P[i]); printf("\n"); return Ask(A, B, P); } void answer(int A, int B) { if(A>B) swap(A, B); //printf("ANSWER %d %d\n", A, B); Answer(A, B); } bool vis[MAXN+10]; int D[MAXN+10]; void solve(int u, int v) { if(vis[u] && vis[v]) return; P[u]=1; P[v]=1; if(query(u, v)) { vis[v]=1; D[v]=D[u]+1; answer(u, v); P[u]=0; P[v]=0; return; } vector<int> V; for(int i=0; i<N; i++) { if(i==u) continue; if(i==v) continue; V.push_back(i); } for(int i=0; i<N; i++) P[i]=1; int lo=-1, hi=V.size()-1; while(lo+1<hi) { int mid=lo+hi>>1; for(int j=0; j<=mid; j++) P[V[j]]=0; if(query(u, v)) lo=mid; else hi=mid; for(int j=0; j<=mid; j++) P[V[j]]=1; } for(int i=0; i<N; i++) P[i]=0; int w=V[hi]; solve(u, w); solve(w, v); } void Detect(int _T, int _N) { T=_T; N=_N; int cnt=1; vis[0]=1; for(int i=1; i<N; i++) { if(vis[i]) continue; P[0]=1; P[i]=1; if(query(0, i)) { P[0]=0; vector<int> V; for(int i=0; i<N; i++) if(vis[i]) V.push_back(i); sort(V.begin(), V.end(), [&](const int &p, const int &q) { return D[p]<D[q]; }); int lo=-1, hi=V.size()-1; while(lo+1<hi) { int mid=lo+hi>>1; for(int j=0; j<=mid; j++) P[V[j]]=1; if(query(0, i)) hi=mid; else lo=mid; for(int j=0; j<=mid; j++) P[V[j]]=0; } answer(V[hi], i); D[i]=D[V[hi]]+1; vis[i]=true; P[i]=0; } else { P[0]=0; P[i]=0; solve(0, i); } } }

Compilation message (stderr)

park.cpp: In function 'void solve(int, int)':
park.cpp:59:13: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   59 |   int mid=lo+hi>>1;
      |           ~~^~~
park.cpp: In function 'void Detect(int, int)':
park.cpp:96:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   96 |     int mid=lo+hi>>1;
      |             ~~^~~
park.cpp:77:6: warning: unused variable 'cnt' [-Wunused-variable]
   77 |  int cnt=1;
      |      ^~~
#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...