제출 #676357

#제출 시각아이디문제언어결과실행 시간메모리
676357jamezzz도시들 (IOI15_towns)C++17
0 / 100
16 ms1124 KiB
#include "towns.h"
#include <bits/stdc++.h>
using namespace std;

#define fi first
#define se second
#define pf printf
#define pb push_back
#define sz(x) ((int)x.size())
#define all(x) x.begin(),x.end()
typedef pair<int,int> ii;

map<int,int> memo[150];

inline int ask(int a,int b){
	if(memo[a].find(b)!=memo[a].end())return memo[a][b];
	return memo[a][b]=memo[b][a]=getDistance(a,b);
}

int hubDistance(int N,int sub){
	for(int i=0;i<N;++i)memo[i].clear();
	
	int x=ask(0,1),y=ask(1,2),z=ask(0,2);
	int a=(x+z-y)/2;int b=x-a,c=z-a;
	vector<ii> v;
	v.pb({a,0});v.pb({b,1});v.pb({c,2});
	for(int i=3;i<N;++i){
		int y=ask(1,i),z=ask(0,i);
		int na=(x+z-y)/2;
		if(a<=na)v.pb({z-a,i});
		else v.pb({y-b,i});
	}
	
	//for(auto[x,y]:v)pf("%d %d\n",x,y);
	
	int mx=0,far=0;
	for(auto[d,i]:v){
		if(d>mx)mx=d,far=i;
	}
	
	int out,ans=mx;
	vector<int> l;
	vector<ii> r;
	for(auto[d,i]:v){
		int x=ask(i,far);
		if(x==d+mx)l.pb(d);
		else{
			r.pb({(d+mx-x)/2,d});
		}
	}
	sort(all(r),greater<ii>());
	
	//pf("ans: %d\n",ans);
	while(sz(r)!=1){
		//pf("l: ");for(int i:l)pf("%d ",i);pf("\n");
		//pf("r: ");for(auto[a,b]:r)pf("(%d %d) ",a,b);pf("\n");
		int cur=r.back().fi;
		//pf("cur: %d\n",cur);
		int mx=0;
		for(int i=0;i<sz(l);++i){
			l[i]+=cur;
			mx=max(mx,l[i]);
		}
		for(int i=0;i<sz(r);++i){
			r[i].fi-=cur;
			r[i].se-=cur;
			mx=max(mx,r[i].se);
		}
		while(r.back().fi==cur){
			l.pb(r.back().se);
			r.pop_back();
		}
		//pf("l: ");for(int i:l)pf("%d ",i);pf("\n");
		//pf("r: ");for(auto[a,b]:r)pf("(%d %d) ",a,b);pf("\n");
		//pf("mx: %d\n",mx);
		if(ans>mx)ans=mx;
		else break;
	}
	
	return ans;
}

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

towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:28:7: warning: declaration of 'y' shadows a previous local [-Wshadow]
   28 |   int y=ask(1,i),z=ask(0,i);
      |       ^
towns.cpp:23:17: note: shadowed declaration is here
   23 |  int x=ask(0,1),y=ask(1,2),z=ask(0,2);
      |                 ^
towns.cpp:28:18: warning: declaration of 'z' shadows a previous local [-Wshadow]
   28 |   int y=ask(1,i),z=ask(0,i);
      |                  ^
towns.cpp:23:28: note: shadowed declaration is here
   23 |  int x=ask(0,1),y=ask(1,2),z=ask(0,2);
      |                            ^
towns.cpp:45:7: warning: declaration of 'x' shadows a previous local [-Wshadow]
   45 |   int x=ask(i,far);
      |       ^
towns.cpp:23:6: note: shadowed declaration is here
   23 |  int x=ask(0,1),y=ask(1,2),z=ask(0,2);
      |      ^
towns.cpp:59:7: warning: declaration of 'mx' shadows a previous local [-Wshadow]
   59 |   int mx=0;
      |       ^~
towns.cpp:36:6: note: shadowed declaration is here
   36 |  int mx=0,far=0;
      |      ^~
towns.cpp:41:6: warning: unused variable 'out' [-Wunused-variable]
   41 |  int out,ans=mx;
      |      ^~~
towns.cpp:20:27: warning: unused parameter 'sub' [-Wunused-parameter]
   20 | int hubDistance(int N,int sub){
      |                       ~~~~^~~
#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...