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

 

你可能感兴趣的:(USACO)