Problem:
陸上競技大会

陸上競技大会 200M の準決勝 3 組のレースが行われました。それぞれの組に 8 名（計 24 名）の選手が出場します。各組上位 2 位までの選手と、各組の 3 位以下の全選手の中から上位 2 名の計 8 名が決勝に進出します。

選手番号とタイムを入力とし、決勝進出者 8 名の番号とそのタイムを出力するプログラムを作成してください。

Input

入力は以下の形式で与えられます。

p1 t1
p2 t2
:
p24 t24

1 行目から 8 行目に１組目の選手番号 pi (整数、1 ≤ pi ≤ 10000) とタイム ti (1/100 まで計測した実数、1 ≤ ti ≤ 100)、9 行目から 16 行目に２組目の選手番号 pi とタイム ti、17 行目から 24 行目に３組目の選手番号 pi とタイム ti が与えられます。同じ選手番号の選手、同タイムの選手はいないものとします。

Output

以下の順番で、決勝進出者の選手番号とタイムを空白区切りでそれぞれ１行に出力してください。

1 組目の 1 位の選手

1 組目の 2 位の選手

2 組目の 1 位の選手

2 組目の 2 位の選手

3 組目の 1 位の選手

3 組目の 2 位の選手

各組で 3 位以下の選手の中でタイムが 1 位の選手

各組で 3 位以下の選手の中でタイムが 2 位の選手

Sample Input

18 25.46
16 26.23
3 23.00
10 24.79
5 22.88
11 23.87
19 23.90
1 25.11
23 23.88
4 23.46
7 24.12
12 22.91
13 21.99
14 22.86
21 23.12
9 24.09
17 22.51
22 23.49
6 23.02
20 22.23
24 21.89
15 24.14
8 23.77
2 23.42

Output for the Sample Input

5 22.88
3 23.00
13 21.99
14 22.86
24 21.89
20 22.23
17 22.51
12 22.91

Solution in JAVA (judge verdict: Wrong Answer)

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int ResurrectionOfLosersN[] = new int[6];
		double ResurrectionOfLosersT[] = new double[6];
		double time[][] = new double[3][8];
		BigDecimal number;
		DecimalFormat format = new DecimalFormat("#.#");
		format.setMinimumFractionDigits(2);
		format.setMaximumFractionDigits(2);
		int num[][] = new int[3][8];

		for(int i = 0 ; i < 3 ; i++){
			for(int j = 0 ; j < 8 ; j++){
				num[i][j] = scan.nextInt();
				time[i][j] =scan.nextDouble();
			}
		}
		for(int i = 0 ; i < 3 ; i++){
			for(int j = 0 ; j < 5 ; j++){
				for(int k = 0 ; k < 5-j ; k++){
					if(time[i][k] > time[i][k+1]){
						double D = time[i][k];
						time[i][k] = time[i][k+1];
						time[i][k+1] = D;
						int d = num[i][k];
						num[i][k] = num[i][k+1];
						num[i][k+1] = d;
					}
				}
			}
		}
		for(int i = 0 ; i < 3 ; i++){
			number = new BigDecimal(time[i][0]);
			System.out.println(num[i][0] + " " + format.format(number));
			number = new BigDecimal(time[i][1]);
			System.out.println(num[i][1] + " " + format.format(number));
			ResurrectionOfLosersN[i*2] = num[i][2];
			ResurrectionOfLosersT[i*2] = time[i][2];
			ResurrectionOfLosersN[i*2+1] = num[i][3];
			ResurrectionOfLosersT[i*2+1] = time[i][3];
		}
		for(int j = 0 ; j < 5 ; j++){
			for(int k = 0 ; k < 5-j ; k++){
				if(ResurrectionOfLosersT[k] > ResurrectionOfLosersT[k+1]){
					double D = ResurrectionOfLosersT[k];
					ResurrectionOfLosersT[k] = ResurrectionOfLosersT[k+1];
					ResurrectionOfLosersT[k+1] = D;
					int d = ResurrectionOfLosersN[k];
					ResurrectionOfLosersN[k] = ResurrectionOfLosersN[k+1];
					ResurrectionOfLosersN[k+1] = d;
				}
			}
		}
		number = new BigDecimal(ResurrectionOfLosersT[0]);
		System.out.println(ResurrectionOfLosersN[0] + " " + format.format(number));
		number = new BigDecimal(ResurrectionOfLosersT[1]);
		System.out.println(ResurrectionOfLosersN[1] + " " + format.format(number));
	}
}