Problem:
コンテスト

問題

先日，オンラインでのプログラミングコンテストが行われた． W大学とK大学のコンピュータクラブは以前からライバル関係にあり，このコンテストを利用して両者の優劣を決めようということになった．

今回，この2つの大学からはともに10人ずつがこのコンテストに参加した．長い議論の末，参加した10人のうち，得点の高い方から3人の得点を合計し，大学の得点とすることにした．

W大学およびK大学の参加者の得点のデータが与えられる．このとき，おのおのの大学の得点を計算するプログラムを作成せよ．

入力

入力は20行からなる． 1行目から10行目にはW大学の各参加者の得点を表す整数が， 11行目から20行目にはK大学の各参加者の得点を表す整数が書かれている．これらの整数はどれも0以上100以下である．

出力

W大学の得点とK大学の得点を，この順に空白区切りで出力せよ．

入出力例

入力例１

23
23
20
15
15
14
13
9
7
6
25
19
17
17
16
13
12
11
9
5

出力例１

66 61

入力例２

17
25
23
25
79
29
1
61
59
100
44
74
94
57
13
54
82
0
42
45

出力例２

240 250

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。

Solution in JAVA (judge verdict: Accepted)

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) throws FileNotFoundException {

		Scanner scan = new Scanner(System.in);
		// Scanner scan = new Scanner(new
		// File("D:\\UserArea\\J0124567\\Downloads\\0531-input.txt"));

		while (scan.hasNext()) {

			int n = 2;
			for (int i = 0; i < n; i++) {
				TOP3 top3 = new TOP3();
				int k = 10;
				for (int j = 0; j < k; j++)
					top3.e(scan.nextInt());
				if (i > 0)
					System.out.print(" ");
				System.out.print(top3.s());
			}
			System.out.println();

			scan.close();
			System.exit(0);
		}
	}
}

class TOP3 {
	int[] sc = new int[3];

	public void e(int x) {
		if (x < sc[0])
			return;

		sc[0] = x;
		for (int i = 0; i < 2; i++)
			if (sc[i] > sc[i + 1]) {
				int tmp = sc[i];
				sc[i] = sc[i + 1];
				sc[i + 1] = tmp;
			}
	}

	public int s() {
		int tot = 0;
		for (int i = 0; i < 3; i++)
			tot += sc[i];
		return tot;
	}

}