模拟/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 }

 

posted @ 2012-11-15 22:27  Rinyo  阅读(217)  评论(0编辑  收藏  举报