描述
有道为每位员工提供每工作日享受中午与晚上两顿餐费报销,每顿饭额度上限为X元。为了能够用这些钱吃得更丰盛,大家纷纷组成了各种饭团,每天中午和晚上扫荡清华科技园附近各大中小饭馆。
为了使报销过程更加方便,在每个饭团吃完饭的时候,由一个人付帐拿发票,这个人在发票上写上所有饭团成员的姓名,并且拿发票回去报销。如果平均每人的消费超过了额度上限,大家会将超出部分平均补给付帐的同事。
比如,某天中午A B C D E五人到某餐厅吃饭,消费5X + 5元,由A付款,B C D E每人补给A同事1元钱,A同事拿发票可报销得5X元。若消费5X – 5 元,则其他同事无需补钱,A同事拿发票直接报销得到5X – 5元。
由于目前公司的人越来越多,行政MM每天处理这些发票事务非常的繁琐,现在需要你来写一个程序,拿着所有的发票信息,统计一下需要分别给每个人报销多少钱。
输入
输入第一行有一个正整数T,表示下面有T个数据。
对于每个数据,其格式如下
第一行是一个正整数X,表示每个人一顿饭的额度上限,
第二行是一个正整数S,表示饭团报销的发票总数量,
接下来S行分别是每张发票的细节:
对于每一行 输入格式为
n m u1 u2 u3….un ux
n是一个正整数,表示该张发票的饭团人数,m也是一个正整数,表示消费金额总数。
u1..un分别是该饭团的名单,ux为付款人的姓名,ux一定是u1..un中间的一员。
数据中可能会包含一周甚至更长时间的数据,所以,由于每个人在不同时间会参与不同的饭团,所以有些人的名字会出现在好几行内,这是正常现象。

其中0<T<=10, 0<X<=100, 0<S<=10000, 0<n<=10, 0<m<=1000,所有员工的姓名都由大写字母组成,不为空且长度不超过10。
输出
每个数据按照员工姓名字典序,输出分别应该给每个人报销多少钱,如果某人的报销钱数为0,则不需要输出。
请在每组数据结束之后输出一个空行。
样例输入
2
20
4
3 61 A B C B
2 39 A B A
4 88 A B C D C
3 40 B C D B
15
4
3 61 A B C B
2 39 A B A
4 88 A B C D C
3 40 B C D B
样例输出
A 39
B 100
C 80

A 30
B 85
C 60

 郁闷,超时

 

 1 import java.util.Scanner;
 2 import java.util.*;
 3 public class Main {
 4     public static void main(String[] args) {
 5         Scanner in = new Scanner(System.in);
 6         int zu = in.nextInt();
 7         String result ="";
 8         for(int i=0;i<zu;i++)
 9         {
10             Hashtable<String,Integer> haTable= new Hashtable<String,Integer>();
11             int X = in.nextInt();
12             int s = in.nextInt();
13             ArrayList<String> list = new ArrayList<String>();
14             for(int j=0;j<s;j++)
15             {
16                 int count = in.nextInt();
17                 int total = in.nextInt();
18                 String pmaney = "";
19                 for(int k = 0;k<=count;k++)
20                 {
21                     pmaney = in.next();                    
22                 }
23                 if(!list.contains(pmaney))list.add(pmaney);
24                 if(total>X*count)
25                     total = X*count;
26                 if(haTable.containsKey(pmaney))
27                     haTable.put(pmaney,haTable.get(pmaney)+total);
28                 else
29                     haTable.put(pmaney,total);
30             }
31 
32             String[] keys = new String[list.size()];
33             list.toArray(keys);
34             Arrays.sort(keys);
35             for(int j=0;j<keys.length;j++)
36             {
37                 result += keys[j]+ " "+ haTable.get(keys[j])+"\n";
38             }
39             result+="\n";
40         }
41         System.out.println(result);
42     }
43 }