Greedy Gift Givers
Greedy Gift Givers
A group of NP (2 ≤ NP ≤ 10) uniquely named friends has decided to exchange gifts of money. Each of these friends might or might not give some money to any or all of the other friends. Likewise, each friend might or might not receive money from any or all of the other friends. Your goal in this problem is to deduce how much more money each person gives than they receive.
The rules for gift-giving are potentially different than you might expect. Each person sets aside a certain amount of money to give and divides this money evenly among all those to whom he or she is giving a gift. No fractional money is available, so dividing 3 among 2 friends would be 1 each for the friends with 1 left over -- that 1 left over stays in the giver's "account".
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, no one of whom has a name longer than 14 characters, the money each person in the group spends on gifts, and a (sub)list of friends to whom each person gives gifts, determine how much more (or less) each person in the group gives than they receive.
IMPORTANT NOTE
The grader machine is a Linux machine that uses standard Unix conventions: end of line is a single character often known as '\n'. This differs from Windows, which ends lines with two charcters, '\n' and '\r'. Do not let your program get trapped by this!
PROGRAM NAME: gift1
INPUT FORMAT
Line 1: | The single integer, NP | |||
Lines 2..NP+1: | Each line contains the name of a group member | |||
Lines NP+2..end: | NP groups of lines organized like this:
|
SAMPLE INPUT (file gift1.in)
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
OUTPUT FORMAT
The output is NP lines, each with the name of a person followed by a single blank followed by the net gain or loss (final_money_value - initial_money_value) for that person. The names should be printed in the same order they appear on line 2 of the input.
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 that meets this constraint. Any money not given is kept by the giver.
SAMPLE OUTPUT (file gift1.out)
dave 302
laura 66
owen -359
vick 141
amr -150
题解: n为人的名字个数
n个名字
接下来有n
--------------------
输入一个名字
输入要给的钱数 和 人数
要给的人的名字
---------------------
OK code:
/*
ID: ******
PROG: gift1
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
typedef struct
{
char name[];
int receive;
}person;
person P[];
int find(char s[],int m)
{
int i;
for(i=;i<m;i++)
if(strcmp(P[i].name,s)==)
break;
return i;
} int main() {
ofstream fout ("gift1.out");
ifstream fin ("gift1.in"); char s[];
int m,n,t,i,v,g,f,j;
fin>>m;
for(i=;i<m;i++)
{
fin>>P[i].name;
P[i].receive=;
}
for(i=;i<m;i++)
{
fin>>s;
fin>>t>>v;
n=find(s,m);
P[n].receive-=t;
if(t== && v==) //要注意 0/0的情况,如果直接0/0 就会编译错误
f=;
else if(t%v== )
f=t/v;
else if(t%v!=)
{
g=t-(t%v);
f=g/v;
P[n].receive+=(t%v);
}
for(j=;j<v;j++)
{
fin>>s;
n=find(s,m);
P[n].receive+=f;
}
}
for(i=;i<m;i++)
fout<<P[i].name<<" "<<P[i].receive<<endl;
return ;
}
官方代码:
#include <stdio.h>
#include <string.h>
#include <assert.h> #define MAXPEOPLE 10
#define NAMELEN 32 typedef struct Person Person;
struct Person {
char name[NAMELEN];
int total;
}; Person people[MAXPEOPLE];
int npeople; void
addperson(char *name)
{
assert(npeople < MAXPEOPLE);
strcpy(people[npeople].name, name);
npeople++;
} Person*
lookup(char *name)
{
int i; /* look for name in people table */
for(i=; i<npeople; i++)
if(strcmp(name, people[i].name) == )
return &people[i]; assert(); /* should have found name */
} int
main(void)
{
char name[NAMELEN];
FILE *fin, *fout;
int i, j, np, amt, ng;
Person *giver, *receiver; fin = fopen("gift1.in", "r");
fout = fopen("gift1.out", "w"); fscanf(fin, "%d", &np);
assert(np <= MAXPEOPLE); for(i=; i<np; i++) {
fscanf(fin, "%s", name);
addperson(name);
} /* process gift lines */
for(i=; i<np; i++) {
fscanf(fin, "%s %d %d", name, &amt, &ng);
giver = lookup(name); for(j=; j<ng; j++) {
fscanf(fin, "%s", name);
receiver = lookup(name);
giver->total -= amt/ng;
receiver->total += amt/ng;
}
} /* print gift totals */
for(i=; i<np; i++)
fprintf(fout, "%s %d\n", people[i].name, people[i].total);
exit ();
}
===================测试数据===============================
------- test 1 ----
10 mitnik Poulsen Tanner Stallman Ritchie Baran Spafford Farmer Venema Linus mitnik 300 3 Poulsen Tanner Baran Poulsen 1000 1 Tanner Spafford 2000 9 mitnik Poulsen Tanner Stallman Ritchie Baran Farmer Venema Linus Tanner 1234 1 Poulsen Stallman 536 3 Farmer Venema Linus Ritchie 2000 1 mitnik Baran 79 2 Tanner Farmer Farmer 0 0 Venema 12 9 mitnik Poulsen Tanner Stallman Ritchie Baran Spafford Farmer Linus Linus 1000 1 mitnik ------- test 2 ----
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 ------- test 3 ----
2 john lennon lennon 0 0 john 0 0 ------- test 4 ----
10 Alex Bob Catherine Dave Ebert Francis Godot Harris Iliya Jimbo Alex 2000 9 Bob Catherine Dave Ebert Francis Godot Harris Iliya Jimbo Bob 2000 9 Alex Catherine Dave Ebert Francis Godot Harris Iliya Jimbo Catherine 2000 9 Alex Bob Dave Ebert Francis Godot Harris Iliya Jimbo Dave 2000 9 Alex Bob Catherine Ebert Francis Godot Harris Iliya Jimbo Ebert 2000 9 Alex Bob Catherine Dave Francis Godot Harris Iliya Jimbo Francis 2000 9 Alex Bob Catherine Dave Ebert Godot Harris Iliya Jimbo Godot 2000 9 Alex Bob Catherine Dave Ebert Francis Harris Iliya Jimbo Harris 2000 9 Alex Bob Catherine Dave Ebert Francis Godot Iliya Jimbo Iliya 2000 9 Alex Bob Catherine Dave Ebert Francis Godot Harris Jimbo Jimbo 2000 9 Alex Bob Catherine Dave Ebert Francis Godot Harris Iliya ------- test 5 ----
4 these names are dumb dumb 534 3 these dumb are are 351 1 names these 509 2 dumb names names 278 1 dumb ------- test 6 ----
2 someguy someotherguy someotherguy 1500 1 someguy someguy 500 1 someotherguy ------- test 7 ----
8 a b c d e f g h c 500 4 a b d h f 290 3 a b c a 489 7 b c d e f h g g 0 0 e 1789 2 f h d 2000 5 a b h f e b 192 5 a c h g d h 0 2 a b ------- test 8 ----
10 paul stan mark doug fred bill hank rich mike john paul 0 0 john 300 2 paul stan stan 1000 1 paul mark 2000 3 paul stan doug doug 510 2 paul stan fred 1560 2 paul stan bill 178 2 paul stan hank 97 2 paul stan rich 1999 2 paul stan mike 1531 2 paul stan ------- test 9 ----
10 paul stan mark doug fred bill hank rich mike john paul 1693 6 stan mark doug fred bill hank john 1843 3 hank mike paul stan 1346 9 paul mark fred bill doug hank rich mike john mark 1657 1 paul doug 1256 9 paul stan bill mark fred rich hank mike john fred 1250 6 paul stan bill rich john mike bill 1999 2 john mike hank 2000 8 stan mark doug fred rich bill mike john rich 1999 3 paul bill hank mike 1999 5 hank bill mark rich john
Keep up the good work!
Greedy Gift Givers的更多相关文章
- USACO . Greedy Gift Givers
Greedy Gift Givers A group of NP (2 ≤ NP ≤ 10) uniquely named friends has decided to exchange gifts ...
- 119 - Greedy Gift Givers
Greedy Gift Givers The Problem This problem involves determining, for a group of gift-giving frien ...
- USACO Section 1.1-2 Greedy Gift Givers
Greedy Gift Givers 贪婪的送礼者 对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少. 在这一个问题中,每个人都准备了一些钱来送礼物,而这些钱将会被平均分给那 ...
- Section 1.1 Greedy Gift Givers
Greedy Gift Givers A group of NP (2 ≤ NP ≤ 10) uniquely named friends hasdecided to exchange gifts o ...
- 1.1.4 PROB Greedy Gift Givers
Greedy Gift Givers A group of NP (2 ≤ NP ≤ 10) uniquely named friends has decided to exchange gifts ...
- 洛谷 P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers
贪婪的送礼者Greedy Gift Givers 难度:☆ Code: #include <iostream> #include <cstdio> #include <c ...
- usaco training <1.2 Greedy Gift Givers>
题面 Task 'gift1': Greedy Gift Givers A group of NP (2 ≤ NP ≤ 10) uniquely named friends has decided t ...
- Greedy Gift Givers 贪婪的送礼者 USACO 模拟
1002: 1.1.2 Greedy Gift Givers 贪婪的送礼者 时间限制: 1 Sec 内存限制: 128 MB提交: 9 解决: 9[提交] [状态] [讨论版] [命题人:外部导入 ...
- USACO Training Section 1.1 贪婪的送礼者Greedy Gift Givers
P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers 题目描述 对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少.在这一个问题中,每个人都准备了一 ...
随机推荐
- Linux文件服务器实战(系统用户)
ftp匿名用户设置完成之后任何人都可以访问服务器端文件,目录,甚至可以修改删除文件和目录,,那如何存放私密文件并保证文件或者目录专属于拥有者呢,就需要使用vsftp系统用户来实现了. 1.在linux ...
- Mysql5.7.25在windows下安装
在网上看到了很多安装方法,也试了很多,md,网上资源多了也是有各种坑,这里只说在windows下安装mysql5.7.25 一.下载安装包 链接:https://dev.mysql.com/downl ...
- php动态画图
index.php <?php $width=800; $height=600; //绘图技术 基本步骤 前提:在php.ini文件中启用gd库 //创建画布 默认背景是黑色的 $img=ima ...
- scapy--初识
常用的包结构: (1)OSI 5层模型 OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 传 ...
- Python面向对象--高级(一)
## 属性的类型 - 属性可分为类属性和实例属性 - 实例属性可以通过在类中使用self定义,或者直接在类外部使用实例变量定义 class Person(object): def __init__(s ...
- 操作 Java 数组的 12 个最佳方法
1. 声明一个数组 Java代码: String[] aArray = new String[5]; String[] bArray = {"a","b",& ...
- 图解HTTP总结(2)——简单的HTTP协议
HTTP协议是一种不保存状态,即无状态(stateless)协议.HTTP协议自身不对请求和响应之间的通信状态进行保存.也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理. 使用H ...
- Python 文本挖掘:使用情感词典进行情感分析(算法及程序设计)
出处:http://www.ithao123.cn/content-242299.html 情感分析就是分析一句话说得是很主观还是客观描述,分析这句话表达的是积极的情绪还是消极的情绪. 原理 比如 ...
- Ubuntu下配置LAMP + PhpStorm
本文仅作为一个记录,以下配置在Ubuntu 14.10 64-bit上验证通过. 安装Apache 2:sudo apt-get install apache2 安装成功能够后,通过浏览器访问loca ...
- 【Binary Tree Right Side View 】cpp
题目: Given a binary tree, imagine yourself standing on the right side of it, return the values of the ...