제출 #785529

#제출 시각아이디문제언어결과실행 시간메모리
785529fatemetmhr도시들 (IOI15_towns)C++17
35 / 100
13 ms356 KiB
//  ~ Be Name Khoda ~  //

#include "towns.h"
#include <bits/stdc++.h>
//#pragma GCC optimize ("O3")
//#pragma GCC target("avx2")
//#pragma GCC optimize("unroll-loops,Ofast")

using namespace std;

typedef long long ll;

#define pb       push_back
#define mp       make_pair
#define all(x)   x.begin(), x.end()
#define fi       first
#define se       second

const int maxn  =  1e6   + 10;
const int maxn5 =  300;
const int maxnt =  1.2e6 + 10;
const int maxn3 =  1e3   + 10;
const int mod   =  1e9   + 7;
const ll  inf   =  1e18;


ll dis1[maxn5], dis2[maxn5], val[maxn5];
vector <pair<int, int>> av;

int hubDistance(int n, int sub){
	int v = 0;
	dis1[0] = 0;
	for(int i = 1; i < n; i++){
		dis1[i] = getDistance(0, i);
		if(dis1[i] >= dis1[v])
			v = i;
	}
	dis2[v] = 0;
	int u = v;
	for(int i = 0; i < n; i++){
		dis2[i] = getDistance(v, i);
		if(dis2[i] >= dis2[u])
			u = i;
	}
	for(int i = 0; i < n; i++){
		dis1[i] = getDistance(u, i);
	}
	int mnid = 0;
	for(int i = 0; i < n; i++){
		val[i] = abs(dis1[i] - dis2[i]);
		if(val[i] <= val[mnid])
			mnid = i;
	}
	ll len = (dis1[mnid] + dis2[mnid] - dis1[v]) / 2;
	ll R = max(dis1[mnid], dis2[mnid]) - len;
	ll x = R;
	int c = dis1[mnid] > dis2[mnid] ? u : v;
	if(c == v){
		for(int i = 0; i < n; i++)
			swap(dis1[i], dis2[i]);
		swap(u, v);
	}
	int num[3] = {0, 0, 0};
	for(int i = 0; i < n; i++){
		ll len = (dis1[i] + dis2[i] - dis1[v]) / 2;
		if(dis1[i] - len == x)
			num[0]++;
		else if(dis1[i] - len > x)
			num[1]++;
		else if(dis1[i] - len < x)
			num[2]++;
	}
	if(max({num[0], num[1], num[2]}) <= n / 2)
		return R;
	bool re = false;
	for(int i = 0; i < n; i++){
		ll len = (dis1[i] + dis2[i] - dis1[v]) / 2;
		if(dis2[i] - len == x && dis1[i] - len > x)
			re = true;
	}
	if(re){
		int num[3] = {0, 0, 0};
		for(int i = 0; i < n; i++){
			ll len = (dis1[i] + dis2[i] - dis1[v]) / 2;
			if(dis2[i] - len == x)
				num[0]++;
			else if(dis2[i] - len > x)
				num[1]++;
			else if(dis2[i] - len < x)
				num[2]++;
		}
		if(max({num[0], num[1], num[2]}) <= n / 2)
			return R;
	}
	return -R;
}

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

towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:65:6: warning: declaration of 'len' shadows a previous local [-Wshadow]
   65 |   ll len = (dis1[i] + dis2[i] - dis1[v]) / 2;
      |      ^~~
towns.cpp:54:5: note: shadowed declaration is here
   54 |  ll len = (dis1[mnid] + dis2[mnid] - dis1[v]) / 2;
      |     ^~~
towns.cpp:74:10: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   74 |   return R;
      |          ^
towns.cpp:77:6: warning: declaration of 'len' shadows a previous local [-Wshadow]
   77 |   ll len = (dis1[i] + dis2[i] - dis1[v]) / 2;
      |      ^~~
towns.cpp:54:5: note: shadowed declaration is here
   54 |  ll len = (dis1[mnid] + dis2[mnid] - dis1[v]) / 2;
      |     ^~~
towns.cpp:82:7: warning: declaration of 'num' shadows a previous local [-Wshadow]
   82 |   int num[3] = {0, 0, 0};
      |       ^~~
towns.cpp:63:6: note: shadowed declaration is here
   63 |  int num[3] = {0, 0, 0};
      |      ^~~
towns.cpp:84:7: warning: declaration of 'len' shadows a previous local [-Wshadow]
   84 |    ll len = (dis1[i] + dis2[i] - dis1[v]) / 2;
      |       ^~~
towns.cpp:54:5: note: shadowed declaration is here
   54 |  ll len = (dis1[mnid] + dis2[mnid] - dis1[v]) / 2;
      |     ^~~
towns.cpp:93:11: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   93 |    return R;
      |           ^
towns.cpp:95:9: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
   95 |  return -R;
      |         ^~
towns.cpp:30:28: warning: unused parameter 'sub' [-Wunused-parameter]
   30 | 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...