模拟/USACO 1.1.2 Greedy Gift Givers
题意:给出n个人,及每个人要送出去多少钱以及送出的名单,求最后的收入-支出。
分析:因为给的钱也许不能整除要给的名单,所以自己可以留着tot & num这么多钱,再把要给钱的名单中的名字的钱数+tot / num,至于名字的查找,可以用strcmp解决。最后别忘了每个人要减去送给别人的钱,复杂度O(n3)。
1 #include<cstdio> 2 #include<cstring> 3 struct rec 4 { 5 char na[15]; 6 int money; 7 }a[15]; 8 int main() 9 { 10 freopen("gift1.in","r",stdin); 11 freopen("gift1.out","w",stdout); 12 int n; 13 scanf("%d",&n); 14 for (int i=0;i<n;i++) 15 { scanf("%s",&a[i].na); 16 a[i].money=0; 17 } 18 char giv[15]; 19 int tot,num; 20 while (scanf("%s%d%d",giv,&tot,&num)!=EOF) 21 if (num!=0) 22 { 23 for (int i=0;i<n;i++) 24 if (strcmp(giv,a[i].na)==0) 25 a[i].money=a[i].money-tot+tot%num; 26 for (int j=0;j<num;j++) 27 { 28 char recei[15]; 29 scanf("%s",recei); 30 for (int k=0;k<n;k++) 31 if (strcmp(recei,a[k].na)==0) a[k].money+=tot/num; 32 } 33 } 34 for (int i=0;i<n;i++) 35 printf("%s %d\n",a[i].na,a[i].money); 36 return 0; 37 }