Baek Jun 2004 Project Teams解答(JAVA)


リンクテキスト
質問する
コードプロジェクトの授業を教授した秀燦は、できるだけ公平にプロジェクトチームを設立したいと思っている.1つのプロジェクトグループは2人の学生で構成され、学生ごとに符号化能力が異なる.学生一人一人がチームのメンバーであるべきだ.公正性を高めるために、秀燦はできるだけチームメンバーのコード能力の一致を維持した.学生たちが符号化能力を備えている場合、秀燦のチーム設立に役立つプログラムを作成します.
問題を簡略化するために,学生数を2 n(nは正の整数)と仮定した.各学生siの符号化能力は正整数w(si)で表され,1つのi群giの符号化能力はw(gi)=Σs∈giw(s)で表される.プログラム作成の目的は、Sm=min{w(Gi)|1≦i≦n}を最大化するようにn個のグループG 1,G 2,...およびGnを構成することであり、このときSmが出力される.
例えば、学生の符号化能力が{1、7、5、8}であれば、(8、1)、(7、5)でグループ化することができ、プログラムは9を出力する必要がある.
入力
入力は標準入力です.入力された最初の行は、チーム数を表す正の整数n(1≦n≦5000)を与える.2行目は、学生のsi符号化能力w(si)を表す2 n個の正の整数を、スペースで区切った(1≦w(si)≦100000).学生たちのコード能力は違います.すなわちi≠jすなわちw(si)≠w(sj).
しゅつりょく
出力は標準出力を採用する.1行の標準出力にsmを出力します.
に答える
各学生の点数を入力し、昇順に並べ替えます.
(1,n),(2,n−1),(3,n−2)のように公平を作成し,すべての公平の相違を最小化した.
公平点数の和の最小値を出力すればよい.
ソースコード
import java.util.*;
import java.io.*;
//import java.math.BigInteger;
public class Main{
    
    public static void main(String [] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        final int NUMBER_OF_TEAM = Integer.parseInt(br.readLine());
        int member[] = new int [NUMBER_OF_TEAM * 2];
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i=0;i < NUMBER_OF_TEAM * 2; i++) {
            member[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(member);
        int min = 200000;
        for(int i=0;i<NUMBER_OF_TEAM;i++) {
            int teamScore = member[i] + member[NUMBER_OF_TEAM*2-1-i];
            if(teamScore < min) {
                min = teamScore;
            }
        }
        sb.append(min);
        sb.append("\n"); 
        
        bw.write(sb.toString());
        
        bw.flush();
        br.close();
        bw.close();
        
    }

    
}