pat 搶紅包

L2-009. 搶紅包

時間限制
300 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard
做者
陳越

沒有人沒搶過紅包吧…… 這裏給出N我的之間互相發紅包、搶紅包的記錄,請你統計一下他們搶紅包的收穫。ios

輸入格式:ide

輸入第一行給出一個正整數N(<= 104),即參與發紅包和搶紅包的總人數,則這些人從1到N編號。隨後N行,第i行給出編號爲i的人發紅包的記錄,格式以下:spa

K N1 P1 ... NK PKcode

其中K(0 <= K <= 20)是發出去的紅包個數,Ni是搶到紅包的人的編號,Pi(> 0)是其搶到的紅包金額(以分爲單位)。注意:對於同一我的發出的紅包,每人最多隻能搶1次,不能重複搶。blog

輸出格式:排序

按照收入金額從高到低的遞減順序輸出每一個人的編號和收入金額(以元爲單位,輸出小數點後2位)。每一個人的信息佔一行,兩數字間有1個空格。若是收入金額有並列,則按搶到紅包的個數遞減輸出;若是還有並列,則按我的編號遞增輸出。內存

輸入樣例:
10
3 2 22 10 58 8 125
5 1 345 3 211 5 233 7 13 8 101
1 7 8800
2 1 1000 2 1000
2 4 250 10 320
6 5 11 9 22 8 33 7 44 10 55 4 2
1 3 8800
2 1 23 2 123
1 8 250
4 2 121 4 516 7 112 9 10
輸出樣例:
1 11.63
2 3.63
8 3.63
3 2.11
7 1.69
6 -1.67
9 -2.18
10 -3.26
5 -3.26
4 -12.32



又是沒好好看題目,「隨後N行,第i行給出編號爲i的人發紅包的記錄」,當時寫的時候一直在糾結要怎麼排序後,每一個人的編號要怎麼正確輸出,真的是腦子沒轉過彎來啊啊。。
其實只要每次輸入的時候記錄下編號,而後不斷更新金額與收到的紅包就能夠了。 一邊走,一邊記錄, 之後要好好讀題 這很重要!!!
 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 using namespace std;
 5 struct tt{
 6     int nn;
 7     int count;
 8     int sum;
 9 }st[10010];
10 bool cmp(tt a, tt b)
11 {
12     if(a.sum > b.sum) 
13     {
14         return true;
15     }
16     else if(a.sum == b.sum)
17     {
18         if(a.count > b.count)
19         {
20             return true;
21         }
22         else if(a.count == b.count)
23         {
24             if(a.nn < b.nn)
25             {
26                 return true;
27             }
28         }
29     }
30     return false;
31 }
32 int main()
33 {
34     int n, k, p, x, y;
35     scanf("%d", &n);
36     for(int i = 1; i <= n; i++)
37     {
38         st[i].count = 0;
39         st[i].sum = 0;
40     }
41     for(int j = 1; j <= n; j++)
42     {
43         st[j].nn = j;
44         scanf("%d", &k);
45         for(int i = 0; i < k; i++)
46         {
47             scanf("%d %d", &x, &y);
48             st[x].sum += y;    
49             st[x].count++;
50             st[j].sum -= y;
51         }
52     }    
53     sort(st+1, st+n+1, cmp);
54     for(int i = 1; i <= n; i++)
55     {
56         printf("%d %.2f\n", st[i].nn, ((double)st[i].sum/100.0));
57     }
58     return 0;
59 }
View Code
相關文章
相關標籤/搜索