zoukankan      html  css  js  c++  java
  • Vijos P1035 贪婪的送礼者【模拟】

    贪婪的送礼者

    描述

    对于一群要互送礼物的朋友,你要确定每个人送出的礼物比收到的多多少。

    在这一个问题中,每个人都准备了一些钱来送礼物,而这些钱将会被平均分给那些将收到他的礼物的人。

    然而,在任何一群朋友中,有些人将送出较多的礼物(可能是因为有较多的朋友),有些人有准备了较多的钱。

    给出一群朋友, 没有人的名字会长于 14 字符,给出每个人将花在送礼上的钱,和将收到他的礼物的人的列表,
    请确定每个人收到的比送出的钱多的数目。

    格式

    输入格式

    第 1 行: 人数NP,2<= NP<=10

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

    第NP+2到最后:
    这里的NP段内容是这样组织的:
    第一行是将会送出礼物人的名字。

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

    输出格式

    输出 NP 行
    每行是一个的名字加上空格再加上收到的比送出的钱多的数目。

    对于每一个人,他名字的打印顺序应和他在输入的2到NP+1行中输入的顺序相同。所有的送礼的钱都是整数。

    每个人把相同数目的钱给每位要送礼的朋友,而且尽可能多给,不能给出的钱被送礼者自己保留。

    样例1

    样例输入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
    

    限制

    各点1S

    来源

    from USACO
    cdwind 整理

    题目链接:https://vijos.org/p/1035

    题解:

    首先要弄清楚题意,题目要求输出收到的比送出的钱多的数目。送出的也就是原来的-余下的,然后再用一个数组记录收到的,答案就是两者之差。

    这里最好用一个结构体来保存名字、原有的钱数和收到的钱数。

    下面给出AC代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int n;
     4 char str[15];
     5 inline int read()
     6 {
     7     int x=0,f=1;
     8     char ch=getchar();
     9     while(ch<'0'||ch>'9')
    10     {
    11         if(ch=='-')
    12             f=-1;
    13         ch=getchar();
    14     }
    15     while(ch>='0'&&ch<='9')
    16     {
    17         x=x*10+ch-'0';
    18         ch=getchar();
    19     }
    20     return x*f;
    21 }
    22 inline void write(int x)
    23 {
    24     if(x<0)
    25     {
    26         putchar('-');
    27         x=-x;
    28     }
    29     if(x>9)
    30     {
    31         write(x/10);
    32     }
    33     putchar(x%10+'0');
    34 }
    35 struct people
    36 {
    37     char name[15];
    38     int money;
    39     int leftmoney;
    40 }p[11];
    41 int find()
    42 {
    43     int i;
    44     for(i=1;i<=n;i++)
    45     {
    46         if(strcmp(str,p[i].name)==0)
    47             break;
    48     }
    49     return i;
    50 }
    51 int main()
    52 {
    53     n=read();
    54     int i,j;
    55     for(i=1;i<=n;i++)
    56     {
    57         cin>>p[i].name;
    58         p[i].leftmoney=0;
    59     }
    60     for(j=1;j<=n;j++)
    61     {
    62         cin>>str;
    63         int num=find();
    64         int sum;
    65         cin>>p[num].money>>sum;//sum表示送出的人数
    66         if(sum)
    67         {
    68             int mon=p[num].money%sum;
    69             p[num].leftmoney+=mon;
    70             for(i=0;i<sum;i++)
    71             {
    72                 cin>>str;
    73                 p[find()].leftmoney+=((p[num].money-mon)/sum);
    74             }
    75         }
    76     }
    77     for(i=1;i<=n;i++)
    78     {
    79         cout<<p[i].name<<" "<<p[i].leftmoney-p[i].money<<endl;
    80     }
    81     return 0;
    82 }
  • 相关阅读:
    Django框架
    Python3中super()的参数传递
    django的rest framework框架——分页、视图、路由、渲染器
    django的rest framework框架——版本、解析器、序列化
    django的rest framework框架——认证、权限、节流控制
    django的rest framework框架——安装及基本使用
    Tiops评测
    CentOS下的IPMI尝试
    CentOS初级扫盲
    CenOS下监控工具尝试
  • 原文地址:https://www.cnblogs.com/ECJTUACM-873284962/p/7053131.html
Copyright © 2011-2022 走看看