제출 #1029689

#제출 시각아이디문제언어결과실행 시간메모리
1029689sleepntsheep도시들 (IOI15_towns)C++17
13 / 100
10 ms436 KiB
#include "towns.h" #include<string.h> #include<stdlib.h> #include<vector> int z; int cache[120][120]; int l(int i, int j){return i<j?i:j;} int h(int i, int j){return i>j?i:j;} int ask(int i, int j) { if(cache[i][j]>=0)return cache[i][j];return cache[i][j]=cache[j][i]=(i-j ? getDistance(i, j): 0); } int argmax(int x, int N) { int mx = 0, dist = -1; for (int y, i = 0; i < N; ++i) if (dist < (y = ask(x, i))) dist = y, mx = i, z = dist; return mx; } #include<map> /* each branch store [arbitary node, branch length (to that node), count of leaves node in branch] */ std::map<int,std::vector<std::array<int,3>>>M; int hubDistance(int N, int sub) { memset(cache,-1,sizeof cache); if (sub==1){ int d1 = argmax(0, N); int d2 = argmax(d1, N); int dd = z; int R = 1e9; for (int i = 0; i < N; ++i) { int a=ask(d1,i),b=ask(d2,i); int branch = (a+b-dd)/2; R=l(R,h(a,b)-branch); } return R; }else if(sub==3){ int d1 = argmax(0, N); int d2 = argmax(d1, N); int dd = z; for(int i=0;i<N;++i)for(int j=0;j<N;++j)ask(i,j); int R = 1e9; for (int i = 0; i < N; ++i) { int a=ask(d1,i),b=ask(d2,i); int branch = (a+b-dd)/2; if(h(a,b)-branch<R){ M.clear(),R=h(a,b)-branch; M[a-branch].push_back(std::array<int,3>{i,branch, 1}); } else if(h(a,b)-branch==R){ int found=0; for(auto &x:M[a-branch]) if(ask(x[0],i)<branch+x[1]) /* same branch */ {++x[2];found=1;break;} if(!found) M[a-branch].push_back(std::array<int,3>{i,branch, 1}); } R=l(R,h(a,b)-branch); } for(auto &[_,branchinfo]:M){ int ok=1; for(auto&x:branchinfo)if(x[2]>(N/2))ok=0; if(ok)return R; } return -R; } }

컴파일 시 표준 에러 (stderr) 메시지

towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:75:1: warning: control reaches end of non-void function [-Wreturn-type]
   75 | }
      | ^
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...