Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e4 + 10;
double leste; // a distância da fronteira leste
int n;
double cidades[MAXN];
int main(){
scanf("%lf", &leste);
scanf("%d", &n);
for(int i = 1; i <= n; i++){
scanf("%lf", &cidades[i]);
}
sort(cidades + 1, cidades + 1 + n); //Ordenamos as cidades de forma crescente
double resp = 1e9 + 10; //Iniciamos a resposta com um valor muito grande, maior
//que qualquer vizinhança possivel
for(int i = 1; i <= n; i++){
double vizinhanca = 0;
double midantes = (cidades[i] + cidades[i-1])/2; //guardaremos o ponto-médio
//entre a cidade atual e a cidade anterior
if(i == 1){
//calculamos a vizinhanca de forma especial para a cidade 1
vizinhanca = cidades[i];
vizinhanca += (cidades[i + 1] + cidades[i])/2 - cidades[i];
}
else if(i == n){
//calculamos a vizinhanca de forma especial para a cidade n
vizinhanca = leste - cidades[i];
vizinhanca += cidades[i] - midantes;
}else{
//calculamos a vizinhanca normalmente para as outras cidades
vizinhanca += (cidades[i + 1] + cidades[i])/2 - cidades[i];
vizinhanca += cidades[i] - midantes;
}
resp = min(vizinhanca, resp);
}
printf("%.2lf\n", resp);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment