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要确定每个人送出的钱比收到的多多少.在这一个问题中,每个人都准备了一 ...
随机推荐
- 协程实现tcp两个客户端的通讯
import socket import gevent from gevent import monkey monkey.patch_all() def cb_work(recv_num,send_n ...
- django+xadmin在线教育平台(七)
4-3 新建项目 Python2.7 创建虚拟环境. mkvirtualenv mxonline2 安装django pip install django==1.9.8 注意Python2下此处必须用 ...
- winrar压缩工具
WinRAR使用心得 免广告 英文版可以设置广告关闭,地址: https://www.win-rar.com/predownload.html?&Version=64bit 把WinRAR默认 ...
- 小游戏banner广告流量量主指引
小程序导航 https://wq.xmaht.top
- 详解 JavaScript 中 splice() 方法
splice() 方法是一个比较少用的方法,但是功能确实很好,并且在我们 coding 的时候,经常有需要 splice() 方法,先介绍一下该方法. 在 JavaScript 中 splice() ...
- 【Sklearn系列】使用Sklearn进行数据预处理
这篇文章主要讲解使用Sklearn进行数据预处理,我们使用Kaggle中泰坦尼克号事件的数据作为样本. 读取数据并创建数据表格,查看数据相关信息 import pandas as pd import ...
- python基础之布尔运算、集合
布尔值 True 真 False 假 所有的数据类型都自带布尔值,数据只有在0,None和空的时候为False. print(bool()) print(bool()) print(bool('')) ...
- java前台传参json,后台用map或者实体对象接收
(一)前台传js对象,里面包含数组,后台用map接收 (1)第一种情况:数组里不包含js对象 var param ={}: param.id=id; param.name=name; var scor ...
- centos使用--supervisor使用
目录 1 下载程序并安装 2 编辑配置文件 3 supervisor的使用 4 配置文件详细解析 参考资料 supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变 ...
- PQFitness
<html> <head> <title></title> <style> *{margin:o;padding:0;} #header{ ...