PTA抢红包

一、题目描述

 

 二、解题思路

  这个题排个序就可以了,在输入的时候用个vis数组去重就行了。

三、代码实现

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 double b[100010];
 4 int red[100010];
 5 struct node{
 6     int num;
 7     double m;
 8 }c[100010];
 9 bool cmp(node p,node k)
10 {
11     if(p.m > k.m)
12         return true;
13     else if(p.m == k.m)
14         return red[p.num] > red[k.num];
15     else
16         return false;
17 }
18 int main()
19 {
20     int n;
21     int m;
22     cin >> n;
23     m = n;
24     int j = 0;
25     while(m--){
26         int k;
27         j++;
28         cin >> k;
29         double sum = 0;
30         bool vis[10010];
31         memset(vis,0,sizeof(vis));
32         while(k--){
33             int num;
34             double yen;
35             cin >> num >> yen;
36             if(vis[num]) 
37                 continue;
38             vis[num] = true;
39             red[num]++;
40             b[num] += yen;
41             sum += yen;
42         }
43         b[j] -= sum; 
44     }
45     for(int i = 1;i <= n;i++)
46         c[i].num = i,c[i].m = b[i];
47     sort(c + 1,c + n + 1,cmp);
48     for(int i = 1;i <= n;i++){
49         cout << c[i].num << ' ';
50         cout << fixed << setprecision(2) << c[i].m / 100.0 << endl;
51     }
52     return 0;
53 }
posted @ 2022-03-19 15:58  scannerkk  阅读(63)  评论(0)    收藏  举报