Aprender-C

← Todos los talleres

La tabla de la olimpiada

En una olimpiada escolar de matemáticas cada equipo recibe al inscribirse un número correlativo: el uno es el que llegó primero. Al terminar la prueba hay que publicar la tabla, y las bases resuelven los empates de una forma que no se discute: a igual puntaje va antes el que se inscribió antes. Los puntajes bajan de cero cuando un equipo responde mal y la respuesta mala descuenta.

Qué hay que hacer

Lee los equipos con su número de inscripción y su puntaje, y escribe la tabla de mayor a menor puntaje. Cuando dos equipos empatan en puntaje, va antes el del número de inscripción más bajo. Cada equipo recibe un lugar propio: dos equipos empatados ocupan lugares distintos y consecutivos, nunca el mismo.

El archivo que te dan

La primera línea trae n, cuántos equipos hay, con 1 <= n <= 2000. Después vienen n líneas con dos enteros separados por un espacio: el número de inscripción —distinto para cada equipo, entre 1 y 100000— y el puntaje, entre -500 y 1000.

El que tienes que escribir

n líneas, una por equipo y en el orden de la tabla. Cada línea trae tres números separados por un espacio: el lugar, el número de inscripción y el puntaje. El primer lugar es el 1, no el 0, y los lugares llegan hasta n sin saltarse ninguno ni repetir.

Los casos que puedes ver

Hay 6 en total. Los demás se descubren fallando, como en el ramo.

el ejemplo del enunciado: dos equipos empatados en 50

entrada

4
17 50
8 70
23 50
41 12

salida

1 8 70
2 17 50
3 23 50
4 41 12

sin empates, y con un equipo penalizado

entrada

3
5 -10
9 33
2 0

salida

1 9 33
2 2 0
3 5 -10

Tu programa

Recibe las dos rutas por argv, igual que en el ramo. Lo que escribas con fprintf es lo que se compara.

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
if (argc < 3) {
fprintf(stderr, "uso: %s entrada salida\n", argv[0]);
return 1;
}
/* Falta: abrir argv[1] con "r" y argv[2] con "w". */
/* Falta: leer cuántos equipos hay. */
/* Falta: guardar cada equipo con sus DOS datos juntos, no en dos arreglos sueltos. */
/* Falta: ordenar por puntaje de mayor a menor, y a igual puntaje por inscripción menor. */
/* Falta: escribir lugar, inscripción y puntaje de cada equipo. */
/* Falta: cerrar los dos archivos antes de terminar. */
return 0;
}