Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

ESTAGIO - Estágio

Você conseguiu um estágio para trabalhar como programador na secretaria da sua escola. Como primeira tarefa, Dona Vilma, a coordenadora, solicitou que você aprimore um programa que foi desenvolvido pelo estagiário anterior. Esse programa tem como entrada uma lista de nomes e de médias finais dos alunos de uma turma, e determina o aluno com a maior média na turma. Dona Vilma pretende utilizar o programa para premiar o melhor aluno de cada turma da escola. O programa desenvolvido pelo estagiário anterior encontra-se no final (em C, C++ e Pascal).

Como você pode verificar, o programa na forma atual tem uma imperfeição: no caso de haver alunos empatados com a melhor média na turma, ele imprime apenas o primeiro aluno que aparece na lista.

Tarefa

Dona Vilma deseja que você altere o programa para que ele produza uma lista com todos os alunos da turma que obtiveram a maior média, e não apenas um deles. Você consegue ajudá-la nesta tarefa?

Entrada

A entrada é constituída de vários conjuntos de teste, representando várias turmas. A primeira linha de um conjunto de testes contém um número inteiro N (1 <= N <= 1000) que indica o total de alunos na turma. As N linhas seguintes contêm, cada uma, um par de números inteiros C (1 <= C <= 20000) e M (0 <= M <= 100), indicando respectivamente o código e a média de um aluno. O final da entrada é indicado por uma turma com N = 0.

Saída

Para cada turma da entrada seu programa deve produzir três linhas na saída. A primeira linha deve conter um identificador do conjunto de teste, no formato “Turma n”, onde n é numerado a partir de 1. A segunda linha deve conter os códigos dos alunos que obtiveram a maior média da turma. Os códigos dos alunos devem aparecer na mesma ordem da entrada, e cada um deve ser seguido de um espaço em branco. A terceira linha deve ser deixada em branco. O formato mostrado no exemplo de saída abaixo deve ser seguido rigorosamente.

Exemplo

Entrada:
3
1 85
2 91
3 73
5
12300 81
12601 99
15023 76
10111 99
212 99
0

Saída:
Turma 1
2

Turma 2
12601 10111 212

Restrições

0 <= N <= 1000 (N = 0 apenas para indicar o fim da entrada)
1 <= C <= 20000
0 <= M <= 100

Código em Pascal
program estagio;
const MAX_ALUNOS = 1000;
type
    registro_aluno = record
                         codigo, media : integer;
                     end;
var
    alunos : array[1..MAX_ALUNOS] of registro_aluno;
    n, i, indice_melhor, turma : integer;
begin
    readln(n); { le numero de alunos da primeira turma }
    turma := 1;
    while n > 0 do begin
       for i := 1 to n do { le dados dos alunos }
          readln(alunos[i].codigo, alunos[i].media);
       indice_melhor := 1;
       for i := 2 to n do { procura aluno de maior media }
          if alunos[i].media > alunos[indice_melhor].media then
             indice_melhor := i;
       { escreve resposta }
       writeln('Turma ', turma);
       turma := turma + 1;
       writeln(alunos[indice_melhor].codigo);
       writeln;
       { le numero de alunos da proxima turma }
       readln(n);
    end;
end.
Código em C
#include <stdio.h>
#define MAX_ALUNOS 1000
int main()
{
  int i, indice_melhor, n;
  int turma=1;
  struct
  {
    int codigo, media;
  } alunos[MAX_ALUNOS];
  /* le numero de alunos da primeira turma */
  scanf("%d", &n);
  while (n > 0)
    {
      /* le dados dos alunos */
      for (i = 0; i < n; i++)
         scanf("%d %d", &alunos[i].codigo, &alunos[i].media);
      /* procura aluno de maior media */
      indice_melhor = 0;
      for (i = 1; i < n; i++)
         if (alunos[i].media > alunos[indice_melhor].media)
             indice_melhor = i;
      /* escreve resposta */
      printf("Turma %d\n%d\n\n", turma++, alunos[indice_melhor].codigo);
      /* le numero de alunos da proxima turma */
      scanf("%d", &n);
    }
  return 0;
}
Código em C++
#include <iostream>
const int MAX_ALUNOS = 1000;
int main()
{
  int i, indice_melhor, n;
  int turma=1;
  struct
  {
    int codigo, media;
  } alunos[MAX_ALUNOS];
  // le numero de alunos da primeira turma
  cin >> n;
  while (n > 0)
    {
      // le dados dos alunos
      for (i = 0; i < n; i++)
         cin >> alunos[i].codigo >> alunos[i].media;
      // procura aluno de maior media
      indice_melhor = 0;
      for (i = 1; i < n; i++)
         if (alunos[i].media > alunos[indice_melhor].media)
             indice_melhor = i;
      // escreve resposta
      cout << "Turma " << turma++ << "\n";
      cout << alunos[indice_melhor].codigo << "\n\n";
      // le numero de alunos da proxima turma
      cin >> n;
    }
  return 0;
}

Adicionado por:Wanderley Guimarăes
Data:2006-05-05
Tempo limite:1s
Tamanho do fonte:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Linguagem permitida:Todas exceto: ASM64 CLOJURE ERL FSHARP JS-RHINO NODEJS PERL6 PY_NBC SCALA TCL VB.NET
Origem:Olimpiada Brasileira de Informatica 2003

hide comments
2012-09-01 03:19:46 LOL
Alguem tem mais casos de teste? năo encontro o erro no meu programa...
2012-06-03 15:18:45 Matheus Henrique
todos os casos de testes que faço, obtenho a saída esperada, mas quando submeto dá "resposta errada".
2012-05-15 20:25:27 Rafael dos Anjos Menezes
fiz de duas formas diferentes, ambas funcionam perfeitamente nos testes que eu fiz (que nao foram poucos), mas continua dando "resposta errada" D:
2012-02-18 14:24:14 Denis Carvalho Silva
meu código nao foi aceito em c... mas sim em c++. Alguem sabe porque?
2010-08-16 00:11:46 thiagojobson [UERN]
Quem tá acostumado em colocar "Teste n" preste atençăo que o problema pede "Turma n".
2009-09-27 16:39:49 Guilherme Souza
no codigo em c++ falta o
using namespace std;
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.