Submission #95917

#TimeUsernameProblemLanguageResultExecution timeMemory
95917jangwonyoungSimurgh (IOI17_simurgh)C++14
19 / 100
124 ms5140 KiB
#include "simurgh.h" #include<iostream> #include<queue> using namespace std; vector<int>r; vector<int>s; int c; int qry(){ for(int i=0; i<r.size() ;i++) r[i]--; //cout << "QRY: "; //for(int i=0; i<r.size() ;i++) cout << r[i] << ' '; //cout << endl; int ans=count_common_roads(r); r.clear();r.shrink_to_fit(); //cout << "RES: " << ans << endl; return ans; } int e[501][501]; int g[501][501]; int val[501]; bool sh[501]; int N; int make(int id){ //cout << "Make " << id << endl; for(int i=1; i<=id ;i++) sh[i]=false; for(auto cur:s) sh[cur]=true; int ext=0; for(int i=2; i<id ;i++){ if(!sh[i]){ r.push_back(e[1][i]); ext+=g[1][i]; } else r.push_back(e[i][id]); } if(!sh[1]){ int cur=s[0]; r.push_back(e[1][cur]); ext+=g[1][cur]; } else r.push_back(e[1][id]); for(int i=id+1; i<=N ;i++) r.push_back(e[1][i]); int res=qry(); s.clear();s.shrink_to_fit(); return res-ext; } void tzuyu(int id,int l,int r){ for(int j=l; j<=r ;j++) s.push_back(j); int cv=make(id)-c; if(cv==0) return; if(l==r){ g[l][id]=1; return; } int mid=(l+r)/2; tzuyu(id,l,mid); tzuyu(id,mid+1,r); } vector<int>find_roads(int n,vector<int> u,vector<int> v){ N=n; int m=u.size(); if(m!=n*(n-1)/2){ vector<int>rr(n-1); for(int i=0; i<n-1 ;i++) rr[i]=i; return rr; } if(n==2){r.push_back(0);return r;} for(int i=0; i<m ;i++) e[u[i]+1][v[i]+1]=e[v[i]+1][u[i]+1]=i+1; int sum=0; for(int i=1; i<=n ;i++){ for(int j=1; j<=n ;j++) if(i!=j) r.push_back(e[j][j%n+1]); val[i]=qry(); sum+=val[i]; } g[1][2]=sum/(n-1)-val[1]; for(int i=3; i<=n ;i++){ for(int j=1; j<i ;j++) s.push_back(j); int x=make(i); for(int j=2; j<i ;j++) s.push_back(j); int y=make(i); s.push_back(1); int z=make(i); c=y+z-x; g[1][i]=z-c; tzuyu(i,2,i-1); } for(int i=1; i<=n ;i++) for(int j=i+1; j<=n ;j++) if(g[i][j]) r.push_back(e[i][j]-1); return r; }

Compilation message (stderr)

simurgh.cpp: In function 'int qry()':
simurgh.cpp:9:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<r.size() ;i++) r[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...