zoukankan      html  css  js  c++  java
  • 119

     Greedy Gift Givers 

     

    The Problem

    This problem involves determining, for a group of gift-giving friends, how much more each person gives than they receive (and vice versa for those that view gift-giving with cynicism).

     

    In this problem each person sets aside some money for gift-giving and divides this money evenly among all those to whom gifts are given.

     

    However, in any group of friends, some people are more giving than others (or at least may have more acquaintances) and some people have more money than others.

     

    Given a group of friends, the money each person in the group spends on gifts, and a (sub)list of friends to whom each person gives gifts; you are to write a program that determines how much more (or less) each person in the group gives than they receive.

     

    The Input

    The input is a sequence of gift-giving groups. A group consists of several lines:

    • the number of people in the group,
    • a list of the names of each person in the group,
    • a line for each person in the group consisting of the name of the person, the amount of money spent on gifts, the number of people to whom gifts are given, and the names of those to whom gifts are given.

    All names are lower-case letters, there are no more than 10 people in a group, and no name is more than 12 characters in length. Money is a non-negative integer less than 2000.

     

    The input consists of one or more groups and is terminated by end-of-file.

     

    The Output

    For each group of gift-givers, the name of each person in the group should be printed on a line followed by the net gain (or loss) received (or spent) by the person. Names in a group should be printed in the same order in which they first appear in the input.

     

    The output for each group should be separated from other groups by a blank line. All gifts are integers. Each person gives the same integer amount of money to each friend to whom any money is given, and gives as much as possible. Any money not given is kept and is part of a person's ``net worth'' printed in the output.

     

    Sample Input

     

    5
    dave laura owen vick amr
    dave 200 3 laura owen vick
    owen 500 1 dave
    amr 150 2 vick owen
    laura 0 2 amr vick
    vick 0 0
    3
    liz steve dave
    liz 30 1 steve
    steve 55 2 liz dave
    dave 0 2 steve liz

     

    Sample Output

     

    dave 302
    laura 66
    owen -359
    vick 141
    amr -150
    
    liz -3
    steve -24
    dave 27
    #include<stdio.h>
    #include<string.h>
    struct man{char s[15];int m;}p[12];
    char temp[15];
    int main()
    {
    	int n,i,j,k,pay,num,f=0;
    	while(scanf("%d",&n)!=EOF)
    	{
    		if(f)
    			printf("
    ");
    		f=1;
    		memset(&p,0,sizeof(p));
    		for(i=0;i<n;i++)
    			scanf("%s",p[i].s);
    		for(i=0;i<n;i++)
    		{
    			scanf("%s%d%d",temp,&pay,&num);
    			for(j=0;j<n;j++)
    				if(!strcmp(temp,p[j].s))
    					if(num)
    						p[j].m-=num*(pay/num);
    			for(k=0;k<num;k++)
    			{
    				scanf("%s",temp);
    				for(j=0;j<n;j++)
    					if(!strcmp(temp,p[j].s))
    						p[j].m+=pay/num;
    			}
    		}
    		for(i=0;i<n;i++)
    			printf("%s %d
    ",p[i].s,p[i].m);
    	}
    	return 0;
    }
  • 相关阅读:
    HDU 3123-GCC(递推)
    新交互英语外挂全自己主动版
    BZOJ 2716 Violet 3 天使玩偶 CDQ分治
    关于 FPGA 和 外部芯片接口时序设计
    Ubuntu启动、停止、重新启动MySQL,查看MySQL错误日志、中文编码错误
    Drupal 7 建站学习手记(四):怎样改动Nivo Slider模块的宽高
    Linux下安装Oracle的过程和涉及的知识点-系列4
    游戏开场镜头拉近(Unity3D开发之四)
    并发编程
    给线程发送消息让它执行不同的处理
  • 原文地址:https://www.cnblogs.com/pangblog/p/3299424.html
Copyright © 2011-2022 走看看