Description
圣诞节快到了,同学们每个人都准备了一定的钱用来买礼物。已知每个人送礼物的时候都会把自己准备的钱平均分成自己要送的人数份,送给自己的好友,剩余的钱留在自己手中。同时,也会收到若干份礼物。
现在,LG统计了一下每个人送礼的情况,想请你计算一下大家赔了还是赚了。
现在,LG统计了一下每个人送礼的情况,想请你计算一下大家赔了还是赚了。
Input
第1行一个整数N(0<N<=100),表示人数;
第2行至第N + 1每行一个长度小于50的字符串,表示每个人的名字;
其后N段,每段第一行为人名;
每段第二行为两个整数Si(0<=Si<=10000),Ki(0<=Ki<M),表示这个人准备的用于送礼的钱数和他要送的好友数;
每段其余Ki行每行一个人名,表示要送给的好友。
第2行至第N + 1每行一个长度小于50的字符串,表示每个人的名字;
其后N段,每段第一行为人名;
每段第二行为两个整数Si(0<=Si<=10000),Ki(0<=Ki<M),表示这个人准备的用于送礼的钱数和他要送的好友数;
每段其余Ki行每行一个人名,表示要送给的好友。
Output
共N行,按照输入第2至第N + 1行给定的顺序输出人名及每个人赚了多少(若赔了则输出负数)
Sample Input
3 LG SYC WZ LG 55 2 SYC WZ SYC 100 0 WZ 77 2 LG SYC
Sample Output
LG -16 SYC 65 WZ -49
Source
#include<bits/stdc++.h> using namespace std; #define ll long long #define eps 1e-9 const int inf = 0x3f3f3f3f; const int mod = 1e9+7; const int maxn = 100000 + 8; struct node { string name; int money, sum; }a[100000 + 8]; int main() { int n, num, mon; string name; std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for(int i = 0; i < n; i++) { cin>>a[i].name; a[i].sum = 0; } for(int i = 0; i < n; i++) { cin>>name; cin>>mon>>num; for(int j = 0; j < n; j++) { if(a[j].name == name && num > 0) { a[j].sum -= (mon / num) * num;///计算一开始负了多少钱 break; } } for(int j = 0; j < num; j++) { cin>>name; for(int k = 0; k < n; k++) { if(a[k].name == name) { a[k].sum += (mon / num); break; } } } } for(int i = 0; i < n; i++) { cout<<a[i].name<<" "<<a[i].sum<<' '; } return 0; }