Submission #520862

#TimeUsernameProblemLanguageResultExecution timeMemory
520862azberjibiouPark (JOI17_park)C++17
20 / 100
2084 ms8888 KiB
#include "park.h" #include <bits/stdc++.h> using namespace std; int N; static int Place[1400]; bool Chk[1400]; int now; vector <int> new_check; vector <int> to_check; vector <int> v[1400]; void solv(int s, int e) { for(int i=s;i<=e;i++) Place[to_check[i]]=0; int val=Ask(0, now, Place); for(int i=s;i<=e;i++) Place[to_check[i]]=1; if(val==1) return; if(s==e) { new_check.push_back(to_check[s]); return; } int mid=(s+e)/2; solv(s, mid); solv(mid+1, e); } bool cmp1(int a, int b) { Place[a]=0; int val=Ask(0, b, Place); Place[a]=1; return val==0; } vector <int> euler; void dfs(int now, int pre) { euler.push_back(now); for(int nxt : v[now]) if(nxt!=pre) { dfs(nxt, now); } euler.push_back(now); } int solv_par(int now) { dfs(0, -1); int s=0, e=euler.size()-1; for(int i=0;i<N;i++) Place[i]=0; Place[now]=1; while(s!=e) { int mid=(s+e)/2; for(int i=s;i<=mid;i++) Place[euler[i]]=1; int val=Ask(min(now, euler[s]), max(now, euler[s]), Place); for(int i=s;i<=mid;i++) Place[euler[i]]=0; if(val==0) s=mid+1; else e=mid; } for(int i=0;i<N;i++) Place[i]=1; return euler[s]; } void ez_Detect(int T, int n) { N=n; for(int i=0;i<N;i++) { for(int j=i+1;j<N;j++) { Place[i]=1, Place[j]=1; if(Ask(i, j, Place)) Answer(i, j); Place[i]=0, Place[j]=0; } } } void Detect(int T, int n) { if(T==1) { ez_Detect(T, n); return; } N=n; for(int i=0;i<N;i++) Place[i]=1; Chk[0]=true; for(int i=1;i<N;i++) to_check.push_back(i); while(!to_check.empty()) { now=to_check.back(); to_check.pop_back(); new_check.push_back(now); if(!to_check.empty()) solv(0, to_check.size()-1); sort(new_check.begin(), new_check.end(), cmp1); int par=solv_par(new_check[0]); v[par].push_back(new_check[0]); v[new_check[0]].push_back(par); for(int i=0;i+1<new_check.size();i++) v[new_check[i]].push_back(new_check[i+1]), v[new_check[i+1]].push_back(new_check[i]); for(int ele : new_check) Chk[ele]=true; new_check.clear(); to_check.clear(); for(int i=0;i<N;i++) if(!Chk[i]) to_check.push_back(i); } for(int i=0;i<N;i++) { for(int ele : v[i]) if(ele<i) Answer(ele, i); } }

Compilation message (stderr)

park.cpp: In function 'void Detect(int, int)':
park.cpp:95:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   95 |         for(int i=0;i+1<new_check.size();i++)   v[new_check[i]].push_back(new_check[i+1]), v[new_check[i+1]].push_back(new_check[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...