为了使报销过程更加方便,在每个饭团吃完饭的时候,由一个人付帐拿发票,这个人在发票上写上所有饭团成员的姓名,并且拿发票回去报销。如果平均每人的消费超过了额度上限,大家会将超出部分平均补给付帐的同事。
比如,某天中午A B C D E五人到某餐厅吃饭,消费5X + 5元,由A付款,B C D E每人补给A同事1元钱,A同事拿发票可报销得5X元。若消费5X – 5 元,则其他同事无需补钱,A同事拿发票直接报销得到5X – 5元。
由于目前公司的人越来越多,行政MM每天处理这些发票事务非常的繁琐,现在需要你来写一个程序,拿着所有的发票信息,统计一下需要分别给每个人报销多少钱。
对于每个数据,其格式如下
第一行是一个正整数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。
请在每组数据结束之后输出一个空行。
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 }
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 }