
没有人没抢过红包吧…… 这里给出N个人之间互相发红包、抢红包的记录请你统计一下他们抢红包的收获。输入格式输入第一行给出一个正整数N≤104即参与发红包和抢红包的总人数则这些人从1到N编号。随后N行第i行给出编号为i的人发红包的记录格式如下KN1P1⋯NKPK其中K0≤K≤20是发出去的红包个数Ni是抢到红包的人的编号Pi0是其抢到的红包金额以分为单位。注意对于同一个人发出的红包每人最多只能抢1次不能重复抢。输出格式按照收入金额从高到低的递减顺序输出每个人的编号和收入金额以元为单位输出小数点后2位。每个人的信息占一行两数字间有1个空格。如果收入金额有并列则按抢到红包的个数递减输出如果还有并列则按个人编号递增输出。求大佬指导一下有一个案例超时。import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Comparator; import java.util.List; public class Main { public static void main(String[] args) throws IOException { BufferedReader brnew BufferedReader(new InputStreamReader(System.in)); int nInteger.parseInt(br.readLine()); ListListInteger listnew ArrayList(); for (int i1;in;i){//初始化list ListInteger idnew ArrayList(); id.add(i);//编号 id.add(0);//收入金额 id.add(0);//红包数量 list.add(id); } for (int i0;in;i){ String[] s br.readLine().split( ); int m2*Integer.parseInt(s[0]); for (int i11;i1m;i12){//每次处理一对数据 //加上红包金额 list.get(Integer.parseInt(s[i1])-1).set(1,list.get(Integer.parseInt(s[i1])-1).get(1)Integer.parseInt(s[i11])); //红包数1 list.get(Integer.parseInt(s[i1])-1).set(2,list.get(Integer.parseInt(s[i1])-1).get(2)1); //减去发红包者的金额 list.get(i).set(1,list.get(i).get(1)-Integer.parseInt(s[i11])); } } list.sort(new ComparatorListInteger() {//自定义的排序方法 Override public int compare(ListInteger o1, ListInteger o2) { if (o2.get(1)o1.get(1)){ return 1; }else if (o2.get(1)o1.get(1)){ return -1; }else { if (o2.get(2)o1.get(2)){ return 1; }else if (o2.get(2)o1.get(2)){ return -1; }else { return 0; } } } }); for (int i0;in;i){ String format String.format(%.2f, list.get(i).get(1) / 100.0); System.out.println(list.get(i).get(0) format); } } }