58,454
社区成员
发帖
与我相关
我的任务
分享
package testPackage;
import java.util.*;
public class Main {
public static void main(String args[]){
Scanner in = new Scanner(System.in);
short num = 0;//每个测试用例的人数
ArrayList<ArrayList< ArrayList<Integer> > > cases = new ArrayList<ArrayList<ArrayList<Integer> > >();//测试用例
ArrayList<ArrayList< TreeSet<Integer> > > possibleScores = new ArrayList<ArrayList<TreeSet<Integer> > >();//每一人可能的分数
ArrayList<ArrayList<Integer> > ranks = new ArrayList<ArrayList<Integer> >();//排名
while(in.hasNext()){
num = in.nextShort();
if(num == 0)
break;
cases.add(new ArrayList< ArrayList<Integer> >() );
possibleScores.add(new ArrayList<TreeSet<Integer> >() );
ArrayList<ArrayList<Integer> > currentCase = cases.get(cases.size() - 1);
for(int i = 0; i < num; ++i){
currentCase.add(new ArrayList<Integer>());//输入每个人的分数
currentCase.get(i).add((int)(100 * in.nextDouble()));
currentCase.get(i).add((int)(100 * in.nextDouble()));
currentCase.get(i).add((int)(100 * in.nextDouble()));
possibleScores.get(possibleScores.size() - 1).add(new TreeSet<Integer>());
possibleScores.get(possibleScores.size() - 1).get(i).add(0);
possibleScores.get(possibleScores.size() - 1).get(i).add(currentCase.get(i).get(2));
possibleScores.get(possibleScores.size() - 1).get(i).add(currentCase.get(i).get(1));
possibleScores.get(possibleScores.size() - 1).get(i).add(currentCase.get(i).get(1) + currentCase.get(i).get(2));
possibleScores.get(possibleScores.size() - 1).get(i).add(currentCase.get(i).get(0));
possibleScores.get(possibleScores.size() - 1).get(i).add(currentCase.get(i).get(0) + currentCase.get(i).get(2));
possibleScores.get(possibleScores.size() - 1).get(i).add(currentCase.get(i).get(0) + currentCase.get(i).get(1));
possibleScores.get(possibleScores.size() - 1).get(i).add(currentCase.get(i).get(0) + currentCase.get(i).get(1) + currentCase.get(i).get(2));
}
ranks.add(new ArrayList<Integer>());//输入排名
ranks.get(ranks.size() - 1).add(in.nextInt() - 1);
ranks.get(ranks.size() - 1).add(in.nextInt() - 1);
ranks.get(ranks.size() - 1).add(in.nextInt() - 1);
}
in.close();
Integer max = 0;
for(int i = 0 ; i < cases.size(); ++i){
max = possibleScores.get(i).get(ranks.get(i).get(0)).last();//第一个人的最大值
for(int j = 1 ; j < ranks.get(i).size(); ++j){//一个实例的排行
if(max.compareTo(possibleScores.get(i).get(ranks.get(i).get(j)).last()) > 0){
max = possibleScores.get(i).get(ranks.get(i).get(j)).last();
}else{
if(max.equals(possibleScores.get(i).get(ranks.get(i).get(j)).last())){
if(ranks.get(i).get(j).compareTo(ranks.get(i).get(j - 1)) > 0){//分数相同,小ID在前
continue;
}
}
if((ranks.get(i).get(j).compareTo(ranks.get(i).get(j - 1)) > 0) && possibleScores.get(i).get(ranks.get(i).get(j)).contains(max)){
continue;
}else{
if((max = possibleScores.get(i).get(ranks.get(i).get(j)).lower(max)) == null ){
System.out.println("Case " + (i + 1) + ": " + "No solution");
max = null;
break;
}
}
}
}
if(max != null){
if((int)(max % 100) == 0)
System.out.println("Case " + (i + 1) + ": " + (max / 100) + ".00");
else
if((int)(max % 100) < 10)
System.out.println("Case " + (i + 1) + ": " + (max / 100) + ".0" + (max % 100));
else
System.out.println("Case " + (i + 1) + ": " + (max / 100) + "." + (max % 100));
}
}
}
}