Problem:
体育祭Sport Meet

秋の体育祭が行われます。種目は徒競走、ボール運び、障害物競走、リレーの4種目です。参加チームは n チームで、この4種目の合計タイムが最も小さいチームが「優勝」、次に小さいチームが「準優勝」、そして、最下位より2番目のチームを「ブービー賞」として表彰したいと思います。

各チームの成績を入力として、「優勝」、「準優勝」、「ブービー賞」のチームを出力するプログラムを作成してください。
ただし、チームにはそれぞれ 1 から n のチーム番号が割り当てられています。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下の形式で与えられます。

n
record1
record2
:
recordn

１行目に対象となるチームの数 n (4 ≤ n ≤ 100000)、続く n 行に i 番目のチームの情報が与えられます。各チームの情報は以下の形式で与えられます。

id m1 s1 m2 s2 m3 s3 m4 s4

id (1 ≤ id ≤ n)はチーム番号、m1, s1 はそれぞれ徒競走のタイムの分と秒、m2, s2 はそれぞれボール運びのタイムの分と秒、m3, s3 はそれぞれ障害物競走のタイムの分と秒、m4, s4 はそれぞれリレーのタイムの分と秒を表します。分と秒はともに0 以上 59 以下の整数です。また、合計タイムが複数のチームで同じになるような入力はないものとします。

Output

入力データセットごとに以下の形式でチーム番号を出力します。

1 行目 優勝のチーム番号

2 行目 準優勝のチーム番号

3 行目 ブービー賞のチーム番号

Sample Input

8
34001 3 20 3 8 6 27 2 25
20941 3 5 2 41 7 19 2 42
90585 4 8 3 12 6 46 2 34
92201 3 28 2 47 6 37 2 58
10001 3 50 2 42 7 12 2 54
63812 4 11 3 11 6 53 2 22
54092 3 33 2 54 6 18 2 19
25012 3 44 2 58 6 45 2 46
4
1 3 23 1 23 1 34 4 44
2 5 12 2 12 3 41 2 29
3 5 24 1 24 2 0 3 35
4 4 49 2 22 4 41 4 23
0

Output for the Sample Input

54092
34001
10001
1
3
2

Solution in C (judge verdict: Accepted)

#include <stdio.h>
#include <math.h>
typedef struct team{
    int ban;
    int m1;
    int s1;
    int m2;
    int s2;
    int m3;
    int s3;
    int m4;
    int s4;
}P;
int goukei(int m1,int s1,int m2,int s2,int m3,int s3,int m4,int s4);
int main(){
    int i,n,t;
    int result;
    while(1){
        scanf("%d",&n);
        if(n==0)break;
        int skiroku[n+1];
        P data[n+1];
        for(i=0;i<n;i++){
            scanf("%d %d %d %d %d %d %d %d %d",&data[i].ban,&data[i].m1,&data[i].s1,&data[i].m2,&data[i].s2,&data[i].m3,&data[i].s3,&data[i].m4,&data[i].s4);
            result=goukei(data[i].m1,data[i].s1,data[i].m2,data[i].s2,data[i].m3,data[i].s3,data[i].m4,data[i].s4);
            skiroku[i]=result;
        }
        int work;
        for(i=0;i<n;i++){
            for(t=i+1;t<n;t++){
                if(skiroku[i]>skiroku[t]){
                    work=data[i].ban;
                    data[i].ban=data[t].ban;
                    data[t].ban=work;
                    work=skiroku[i];
                    skiroku[i]=skiroku[t];
                    skiroku[t]=work;
                }
            }
        }
        printf("%d\n%d\n%d\n",data[0].ban,data[1].ban,data[n-2].ban);
    }
    return 0;
}
int goukei(int m1,int s1,int m2,int s2,int m3,int s3,int m4,int s4){
    int byou;
    byou=m1*60+s1+m2*60+s2+m3*60+s3+m4*60+s4;
    return byou;
}