1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| import java.util.*;
import java.io.*;
import java.math.*;
/**
* Auto-generated code below aims at helping you parse
* the standard input according to the problem statement.
**/
class Solution {
public class Defibrilateur
{
int id;
String nom, adresse, tel;
Double dLon, dLat;
public Defibrilateur (int id, String nom, String adresse, String tel, double dLon, double dLat)
{
this.id = id;
this.nom = nom;
this.adresse = adresse;
this.tel = tel;
this.dLon = dLon;
this.dLat = dLat;
}
public double distIndividu2Defib(double lon_indiv, double lat_indiv)
{
// Calcul du x
double x = (this.dLon - lon_indiv)*Math.cos((this.dLat+lat_indiv)/2);
// Calcul du y
double y = this.dLat - lat_indiv;
// Calcul de d
double d = Math.sqrt(x*x + y*y);
return d;
}
}
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
Scanner in = new Scanner (System.in);
// Récupération de la position (en degré) de l'individu et conversion en radians
String lonIndivDeg = in.next();
Double lonIndivRad = deg2Rad(Double.parseDouble(lonIndivDeg.replace(',', '.')));
in.nextLine();
String latIndivDeg = in.next();
Double latIndivRad = deg2Rad(Double.parseDouble(latIndivDeg.replace(',', '.')));
in.nextLine();
// Récupération du nombre de défibrilateur
int N = in.nextInt();
in.nextLine();
// Création du HashMap
HashMap<Integer,Defibrilateur> defibrilateurs = new HashMap<>();
// Itération sur les N défibrilateurs et Stockage des informations dans un HashMap
for (int i=0;i<N;i++)
{
String[] defibTab = in.nextLine().split(";");
int id = Integer.parseInt(defibTab[0]);
String nom = defibTab[1];
String adresse = defibTab[2];
String tel = defibTab[3];
Double dLonRad = deg2Rad(Double.parseDouble(defibTab[4]));
Double dLatRad = deg2Rad(Double.parseDouble(defibTab[5]));
defibrilateurs.put(id, new Defibrilateur(id,nom,adresse,tel,dLonRad,dLatRad));
}
double min = -1;
int idMin = 0;
for(Defibrilateur def : defibrilateurs.values())
{
double d = def.distIndividu2Defib(lonIndivRad, latIndivRad);
if (min = -1 || d<min)
{
min = d;
idMin = def.id;
}
}
System.out.println(defibrilateurs.get(idMin).nom);
}
public static double deg2Rad(double angle)
{
return angle*Math.PI/180;
}
} |
Partager