1. 程式人生 > 其它 >PTA搶紅包

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 }