Submission #758554

# Submission time Handle Problem Language Result Execution time Memory
758554 2023-06-14T21:20:58 Z APROHACK Towns (IOI15_towns) C++14
35 / 100
15 ms 360 KB
#include "towns.h"
#include <bits/stdc++.h>
#define ll long long
#define ff first
#define ss second
#define pb push_back
using namespace std;
int n, nodes;
int x, a, b;
int distancia[5][120];
int hubDistance(int N, int sub) {
	n = N;
	nodes = n;
	x = 0;
	distancia[0][x] = 0;
	int masLejano = 0;
	for(int i = 0 ; i < N ; i ++){
		if(i == x)continue;
		distancia[0][i] = getDistance(x, i);
		if(distancia[0][i] > distancia[0][masLejano]){
			masLejano = i;
		}
	}
	a = masLejano; // A encontrado, buscando B
	masLejano = a;
	distancia[1][a] = 0;
	distancia[1][x] = distancia[0][a];
	for(int i = 0 ; i < N ; i ++){
		if(i == x or i == a)continue;
		distancia[1][i] = getDistance(a, i);
		if(distancia[1][i] > distancia[1][masLejano])masLejano = i;
	}
	if(distancia[0][a] > distancia[1][masLejano]){
		b = x;
		for(int i = 0 ; i < N ; i ++){
			distancia[2][i] = distancia[0][i];
		}
		x = 0;
		while(x == a or x == b)x++;
		distancia[0][a] = distancia[1][x];
		distancia[0][b] = distancia[2][x];
		distancia[0][x] = 0;
		for(int i = 0 ; i < N ; i ++){
			if(i == a or i == b or i == x)continue;
			distancia[0][i] = getDistance(x, i);
		}
	}else{
		b = masLejano;
		distancia[2][a] = distancia[1][b];
		distancia[2][x] = distancia[0][b];
		for(int i = 0 ; i < N ; i ++){
			if(i == a or i == b or i == x)continue;
			distancia[2][i] = getDistance(b, i);
		}
	}
	set<int>st;
	vector<int>listaDist, caminos, hubs;
	map<int, int>cuenta;
	for(int i = 0 ; i < n ; i ++){
		if(i == a or i == b)continue;
		st.insert((distancia[2][a]+distancia[2][i]-distancia[1][i])/2);
		if(cuenta.count((distancia[2][a]+distancia[2][i]-distancia[1][i])/2))cuenta[(distancia[2][a]+distancia[2][i]-distancia[1][i])/2]++;
		else cuenta[(distancia[2][a]+distancia[2][i]-distancia[1][i])/2] = 1;
	}
	for(auto i : st)listaDist.pb(i);
	listaDist.pb(distancia[2][a]);
	int anterior = 0;
	int minimum = INT_MAX;
	for(int i = 0 ; i < n ; i ++){
		caminos.pb(listaDist[i]-anterior);
		minimum = min(minimum, max(listaDist[i], distancia[2][a]-listaDist[i]));
		anterior = listaDist[i];
	}
	int cuentaAcum = 0;
	for(int i = 0 ; i < n ; i ++){
		if(i == 0)cuenta[listaDist[i]]++;
		if(max(listaDist[i], distancia[2][a]-listaDist[i]) == minimum){
			hubs.pb(i);
			//cout << "hub " << minimum  << " : " << cuentaAcum << " " << cuenta[listaDist[i]] << " " << n-(cuenta[listaDist[i]]+cuentaAcum) << endl;
			if(cuentaAcum <= n/2 and cuenta[listaDist[i]] <= n/2 and n-(cuenta[listaDist[i]]+cuentaAcum) <= n/2){
				return minimum;
			}
		}
		cuentaAcum += cuenta[listaDist[i]];
	}
	return -minimum;
	
	
	/*
	cout << "X = " << x << endl;
	for(int i = 0 ; i < N ; i++){
		cout << "dist with " << i << " = " << distancia[0][i] << endl;
	}
	cout << "A = " << a << endl;
	for(int i = 0 ; i < N ; i++){
		cout << "dist with " << i << " = " << distancia[1][i] << endl;
	}
	cout << "B = " << b << endl;
	for(int i = 0 ; i < N ; i++){
		cout << "dist with " << i << " = " << distancia[2][i] << endl;
	}
	*/
	//for(auto i : listaDist)cout << i << " ";
	//cout << endl;
	
}

Compilation message

towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:11:28: warning: unused parameter 'sub' [-Wunused-parameter]
   11 | int hubDistance(int N, int sub) {
      |                        ~~~~^~~
# Verdict Execution time Memory Grader output
1 Correct 13 ms 340 KB Output is correct
2 Correct 10 ms 340 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 15 ms 356 KB Output is correct
5 Correct 14 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 12 ms 356 KB Output is correct
2 Correct 10 ms 356 KB Output is correct
3 Correct 14 ms 360 KB Output is correct
4 Correct 14 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 10 ms 360 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 14 ms 352 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 10 ms 356 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 11 ms 352 KB Output isn't correct
2 Halted 0 ms 0 KB -