[USACO1.1]贪婪的送礼者Greedy Gift Givers

2024-01-29 20:32

本文主要是介绍[USACO1.1]贪婪的送礼者Greedy Gift Givers,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

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

输入输出格式

输入格式:
第 1 行: 人数NP,2<= NP<=10

第 2 行 到 第NP+1 行:这NP个在组里人的名字一个名字一行

第NP+2到最后:

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

第一行是将会送出礼物人的名字。

第二行包含二个数字:第一个是原有的钱的数目(在0到2000的范围里),第二个 NGi 是将收到这个人礼物的人的个数 如果 NGi 是非零的, 在下面 NGi 行列出礼物的接受者的名字,一个名字一行。

输出格式:
输出NP行

每行是人的名字和每个人收到的比送出的钱多的数目

输入输出样例

输入样例#1:
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
输出样例#1:
dave 302
laura 66
owen -359
vick 141
amr -150

说明
题目翻译来自NOCOW。
USACO Training Section 1.1
.
.
.
.
.
.

分析

直接模拟,运用结构体。
.
.
.
.
.
.

程序:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int n,x,h;
char s[1000000],t[1000000];
struct node
{char name[20];int sum;
};
struct node q[1000000];
int main()
{cin>>n;for (int i=1;i<=n;i++)cin>>q[i].name;for (int i=1;i<=n;i++){scanf("%s",s);for (int j=1;j<=n;j++)if (strcmp(s,q[j].name)==0){x=j;break;}int a,b;cin>>a>>b;if (b==0) continue;int y=a/b;int m=y*b;q[x].sum-=m;for (int k=1;k<=b;k++){scanf("%s",s);for (int g=1;g<=n;g++)if (strcmp(s,q[g].name)==0){h=g;break;}q[h].sum+=y;}}for (int i=1;i<=n;i++)cout<<q[i].name<<' '<<q[i].sum<<endl;return 0;
}

这篇关于[USACO1.1]贪婪的送礼者Greedy Gift Givers的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/658100

相关文章

Greedy 类型题总结

Jump Game:思路: Greedy:用maxreach来记录每次可以跳到的最大值,如果某个i > maxreach, 表明这个i我们reach不到,return false,否则 一直更新maxreach class Solution {public boolean canJump(int[] nums) {if(nums == null || nums.length == 0) {

贪婪大陆(线段树题解)

P2184 贪婪大陆 用线段树维护一个区间的sum和tag(懒标记) 我的第一打,没用上容斥原理 显然如果第五个区间也加入第三种,我们再访问3-5有多少种用我下面的代码只能是2种 #include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+10;#define ls (u<<1)

【D-DCVRP】求解DCVRP改进贪婪算法(三)

一、Held-Harp模型 海尔德和卡尔普在1970年提出景点模型,用于求解TSP问题的最优解下界· 该模型同样可以用于DCVRP问题,既有定理1成立。 定理1:根据Held-Karp模型使用向量 π = ( 0 , π 1 , π 2 , ⋯   , π n ) \pi=(0,\pi_1,\pi_2,\cdots,\pi_n) π=(0,π1​,π2​,⋯,πn​)改造DCVRP问题中1

ZOJ 3904 Birthday Gift【NTT】

首先,我们知道的是, num1+num2=N num_1+num_2=N,其中 num1 num_1是Alice的盒子数, num2 num_2是Bob的盒子数。 那么 ans[N]=∑Alice(num1)×Bob(N−num1) ans[N]=\sum Alice(num_1)\times Bob(N-num1),明显是FFT的卷积形式。 接下来分析 Alice(num1) Alice(n

剪绳子(动态规划和贪婪算法)

题目: 把长度为n的绳子剪成m段(n>1,m>1),每段绳子的长度记为k[1],...k[m],则每段绳子的长度的最大乘积是多少?例如身子长度为8时,剪成2,3,3三段得到的乘积最大,为18。 思路: 方法1:动态规划的思想 假设长度为n的绳子被剪成若干段后,各段长度的最大乘积为f(n)。一刀下去可能的位置有1,2,...,n-1,j将绳子分为长度为i和n-i的两段,则f(n)=max{f

php关于正则表达式贪婪模式与非贪婪

工作中,我们经常要用到正则表达式去匹配到我们想要的数据,甚至还会把匹配到的数据替换成我们需要的数据。这一切,似乎很难做到,但是如果你会熟练使用正则表达式,这些,就不是个菜了。 一、贪婪与非贪婪 贪婪模式:可以这样认为,就是在整个表达式匹配成功的前提下,尽可能多的匹配,也就是所谓的“贪婪”,通俗点讲,就是看到想要的,有多少就捡多少,除非再也没有想要的了。 非贪婪模式:可以这样认

钱也许会让人败坏,但没有钱,败坏的可能性更大VS贪婪的背后是恐惧

诗人纪伯伦,曾经写过一则寓言,说他在漫游四方的时候,曾经在一个岛上见过一个人头铁足怪物,在一刻不停的吃着呢土,喝着海水。纪伯伦在旁边观察良久,然后走过去问,“你从不感到满足吗?你的饥渴永远不会得到消解吗?”那个怪物回答说:“不,我已经满足了,我甚至已经吃喝的很疲倦了,但是我总是担心呐,明天没有泥土可以吃,没有海水可以喝啊。” 第一次看到这个故事的时候,我心里确实是被惊了一下。有的时候不管是他人,还

正则表达式 高级规则——四(贪婪与非贪婪)

匹配次数中的贪婪与非贪婪 在使用修饰匹配次数的特殊符号时,有几种表示方法可以使同一个表达式能够匹配不同的次数,比如:"{m,n}", "{m,}", "?", "*","+",具体匹配的次数随被匹配的字符串而定。这种重复匹配不定次数的表达式在匹配过程中,总是尽可能多的匹配。 比如,针对文本"dxxxdxxxd", 举例如下:     表达式            匹配结果

LeetCode-Greedy-455. Assign Cookies

问题:https://leetcode.com/problems/assign-cookies/?tab=Description Assume you are an awesome parent and want to give your children some cookies. But, you should give each child at most one cookie. Each

UVA 10417 Gift Exchanging

题意:对于概率很无解,参考:点击打开链接 #include <iostream>#include <cstdio>#include <cstring>#include <cmath>using namespace std;double p[20][20];int num[10];int N;double ans;void dfs(int cur,double cp){if (cur