描述

对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少。 在这一个问题中,每个人都准备了一些钱来送礼物,而这些钱将会被平均分给那些将收到他的礼物的人。 然而,在任何一群朋友中,有些人将送出较多的礼物(可能是因为有较多的朋友),有些人有准备了较多的钱。 给出一群朋友,没有人的名字会长于 14 字符,给出每个人将花在送礼上的钱,和将收到他的礼物的人的列表, 请确定每个人收到的比送出的钱多的数目。

格式

PROGRAM NAME: gift1

INPUT FORMAT:

(file gift1.in)

  • 第 1 行: 人数NP,2<= NP<=10
  • 第 2 行 到 第NP+1 行:这NP个在组里人的名字,一个名字一行
  • 第NP+2到最后:

这里的I段内容是这样组织的:

  • 第一行是将会送出礼物人的名字。
  • 第二行包含二个数字: 第一个是送出的钱的数目(在0到2000的范围里),第二个 NGi 是将收到这个人礼物的人的个数 如果 NGi 是非零的, 在下面 NGi 行列出礼物的接受者的名字,一个名字一行。
  • OUTPUT FORMAT:
  • (file gift1.out)
  • 输出 NP 行
  • 每行是一个的名字加上空格再加上收到的比送出的钱多的数目。
  • 对于每一个人,他名字的打印顺序应和他在输入的2到NP+1行中输入的顺序相同。所有的送礼的钱都是整数。
  • 每个人把相同数目的钱给每位要接受礼物的朋友,而且尽可能多给,不能给出的钱(即无法被整除的钱)由送礼者本人持有。

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

SAMPLE OUTPUT

dave 302

laura 66

owen -359

vick 141

amr -150

解析:

这个题目不是很难(虽然题目描述的过程很啰嗦,细节繁杂,但数据量太小,纯模拟即可解决问题。)要注意的是:根据输入输出案例,某个人原来有的钱可能是0,也可能某个人是不给别人发钱的。另外:发出去之后剩余的零头要和收到的钱一起算作最后总结余的钱。

 #include<stdio.h>
#include<string.h>
struct person
{
char name[];
int beginMoney;//原来拥有的钱
int everyOne; //该人送钱出去的时候给每个人的钱的数目
int endMoney; //最后拥有的钱
};
int main()
{
int NP;
struct person p[];
int i,len;//共有len个人
char p1[],p2[];//p1是要送出钱的某个人的名字,p2是要从p1收到钱的某个人
int n;//p1要给n个人送钱
int k,j; freopen("gift1.in","r",stdin);
freopen("gift1.out","w",stdout); scanf("%d",&NP);
for(i=;i<NP;i++)
{
scanf("%s",p[i].name);
p[i].beginMoney=;
p[i].everyOne=;
p[i].endMoney=;
}
len=i; while(scanf("%s",p1)!=EOF)
{
for(i=;i<len;i++)
{
if(strcmp(p1,p[i].name)==)
{
break;
}
}
k=i;
scanf("%d%d",&p[k].beginMoney,&n);
if(n>)
{
p[k].everyOne=p[k].beginMoney/n;
p[k].endMoney+=p[k].beginMoney%n;
}
else
{
p[k].everyOne=;
p[k].endMoney+=p[k].beginMoney;
} for(i=;i<n;i++)
{
scanf("%s",p2);
for(j=;j<len;j++)
{
if(strcmp(p2,p[j].name)==)
{
p[j].endMoney+=p[k].everyOne;
break;
}
}
}
}
for(i=;i<len;i++)
{
printf("%s %d\n",p[i].name,p[i].endMoney-p[i].beginMoney);
}
return ;
}

USACO/gift1的更多相关文章

  1. USACO 1.1.2 Greedy Gift Givers(gift1)

    这道题大意就是几个人互送礼物,让你求每个人的盈利. 原题给的样例数据: 5(人的个数.) =========(下面是人名,输出按照这顺序)davelauraowenvickamr ========== ...

  2. USACO chapter1

    几天时间就把USACO chapter1重新做了一遍,发现了自己以前许多的不足.蒽,现在的程序明显比以前干净很多,而且效率也提高了许多.继续努力吧,好好的提高自己.这一章主要还是基本功的训练,没多少的 ...

  3. USACO section 1.1 C++题解

    USACO section1.1:DONE 2017.03.03 TEXT Submitting Solutions DONE 2017.03.04 PROB Your Ride Is Here [A ...

  4. USACO Section1.2

    section1.1主要包括四道题和两个编程知识介绍.下面将对这6个部分内容进行学习. Your Ride Is Here 这道题没什么难度,读懂题目意思就行:把两个字符串按照题目要求转换成数字,然后 ...

  5. Java实现【USACO】1.1.2 贪婪的礼物送礼者 Greedy Gift Givers

    [USACO]1.1.2 贪婪的礼物送礼者 Greedy Gift Givers 题目描述 对于一群要互送礼物的朋友,你要确定每个人送出的礼物比收到的多多少(and vice versa for th ...

  6. USACO . Greedy Gift Givers

    Greedy Gift Givers A group of NP (2 ≤ NP ≤ 10) uniquely named friends has decided to exchange gifts ...

  7. USACO . Your Ride Is Here

    Your Ride Is Here It is a well-known fact that behind every good comet is a UFO. These UFOs often co ...

  8. 【USACO 3.1】Stamps (完全背包)

    题意:给你n种价值不同的邮票,最大的不超过10000元,一次最多贴k张,求1到多少都能被表示出来?n≤50,k≤200. 题解:dp[i]表示i元最少可以用几张邮票表示,那么对于价值a的邮票,可以推出 ...

  9. USACO翻译:USACO 2013 NOV Silver三题

    USACO 2013 NOV SILVER 一.题目概览 中文题目名称 未有的奶牛 拥挤的奶牛 弹簧牛 英文题目名称 nocow crowded pogocow 可执行文件名 nocow crowde ...

随机推荐

  1. php大力力 [001节]2015-08-21.php在百度文库的几个基础教程新手上路日记 大力力php 大力同学 2015-08-21 15:28

    php大力力 [001节]2015-08-21.php在百度文库的几个基础教程新手上路日记 大力力php 大力同学 2015-08-21 15:28 话说,嗯嗯,就是我自己说,做事认真要用表格,学习技 ...

  2. To and Fro

    Description Mo and Larry have devised a way of encrypting messages. They first decide secretly on th ...

  3. 请问用Inno_Setup打包文件夹时怎么排除其中一个文件?

    请问用Inno_Setup打包文件夹时怎么排除其中一个文件? 该文件夹下有几十个文件,多个文件夹,我要一个个加进去该累死,也容易出问题.不知道能不能实现我要的目的. http://www.jrsoft ...

  4. if语句解一元二次方程~

    #include<stdio.h>#include<math.h> void main(){  double a,b,c,x1,x2;  printf("请输入a&q ...

  5. 【转】3 Essential Sublime Text Plugins for Node & JavaScript Developers

    原文转自:http://scottksmith.com/blog/2014/09/29/3-essential-sublime-text-plugins-for-node-and-javascript ...

  6. M2: XAML Controls

    本小节介绍如何在界面上添加简单的XAML Controls, 本例中我们用到了Grid, TextBlock, Button, 和StackPanel控件.XAML自身所有的控件都声明在Windows ...

  7. matlab的调试方法

    • 常用的调试方法.• (1) 设置或清除断点:使用快捷键F12. • (2) 执行:使用快捷键F5.• (3) 单步执行:使用快捷键F10. • (4) step in:当遇见函数时,进入函数内部, ...

  8. 使用SCP在命令行传输文件

    下载远程服务器上的文件 scp   root@10.0.10.10:/home/user/download.txt  ./download.txt 上传文件到远程服务器 scp  ./upload.t ...

  9. 传智springMVC笔记

    springmvc 第一天 springmvc的基础知识 课程安排: 第一天:springmvc的基础知识 什么是springmvc? springmvc框架原理(掌握) 前端控制器.处理器映射器.处 ...

  10. shell命令:删除当前.sh文件所在目录下的zip包,并且重新打包

    filepath=$(cd ")"; pwd) packagePath="$filepath"/package zipPath="$filepath& ...