PTA搶紅包
阿新 • • 發佈:2022-03-19
一、題目描述
二、解題思路
這個題排個序就可以了,在輸入的時候用個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 }