Roches martiennes

Vous faites partie d'un laboratoire de recherche et avez pour mission de mettre au point une sonde destinée à être envoyée sur Mars. Celle-ci doit y collecter des échantillons de roche, et les ramener sur terre pour une analyse approfondie.

Le module dont vous vous occupez est chargé de la sélection des échantillons les plus susceptibles de contenir certains métaux lourds. Plusieurs séries d'analyses sont prévues pour sélectionner un certain nombre d'échantillons, et votre module est chargé du choix final des deux échantillons les plus prometteurs, qui sont ceux les plus denses.

Ecrivez un programme qui prend en entrée une liste de descriptions d'échantillons, avec pour chacun son volume et son poids, et qui choisit et affiche les numéros des deux échantillons les plus denses, c'est-à-dire, dont le rapport poids/volume est le plus grand.

Limites de temps et de mémoire (Python)

  • Temps : 2 s sur une machine à 1 GHz.
  • Mémoire : 1 000 ko.

Contraintes

  • 2 <= N <= 300 000, où N est le nombre d'échantillons.
  • 1 <= V <= 100 000, où V est le volume d'un échantillon.
  • 1 <= P <= 100 000, où P est le poids d'un échantillon.

On vous garantit qu'il n'y aura pas deux échantillons de même densité. On vous garantit également que la différence entre deux densités d'échantillons est toujours supérieure à 10-6.

Entrée

La première ligne de l'entrée contient un entier N : le nombre d'échantillons.

Les N lignes suivantes décrivent les échantillons, du numéro 1 jusqu'au numéro N (inclus). Chacune de ces lignes contient deux entiers séparés par un espace : P et V, respectivement le poids et le volume de l'échantillon décrit.

Sortie

Vous devez écrire sur la sortie les identifiants des deux échantillons les plus denses, en commençant par le plus dense. Ecrivez le tout sur une seule ligne, en séparant les deux entiers que vous affichez par un espace.

Rappel : les identifiants sont des entiers compris entre 1 et N inclus.

Exemple

entrée :

5
52 31
421 423
22 11
33 652
29 10

sortie :

5 3

Commentaires

Les densités (ici arrondies à 10-6) des échantillons de l'exemple proposé sont :

1,677419
0,995272
2,000000
0,050613
2,900000

Entrées-Sorties en C++

Pour inclure la bonne bibliotèque :
   
   #include <stdio.h>

Pour lire le nombre d'échantillons :

   int nombre;
   scanf("%d", &nombre);

Pour lire chaque échantillon :

   int poids, volume;
   scanf("%d%d", &poids, &volume);

Pour afficher le résultat :

   printf("%d %d\n", meilleurIndex1, meilleurIndex2);

Entrées-Sorties en Caml

Pour lire le nombre d'échantillons :

   let nombre = Scanf.scanf " %d" (fun x -> x) in

Pour lire chaque échantillon :

   let poids, volume = Scanf.scanf " %d %d" (fun x y -> x,y) in

Pour afficher le résultat :

   Printf.printf "%d %d\n" meilleurIndex1 meilleurIndex2;

Source : https://www.france-ioi.org/ Créé par : Mathias Hiron et Arthur Charguéraud.