• USACO 1.1.2 Greedy Gift Givers(gift1)


    这道题大意就是几个人互送礼物,让你求每个人的盈利。

    原题给的样例数据:

    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

    这题使用模拟算法就行了,就是注意输入的时候不要掉坑里了。

    还有就是比如说自己有200快钱给3个人,每个人得到66块,剩下两块自己收,并计入答案。

    还有就是想题目里的vick,分给0个人,千万不要除以了0。。对了为了找人名方便,可以把一个人的名字和编号存到一个map容器中,具体在代码里已经有了,就不细说了。

    下面是我的程序:

    /*
    ID:aaabbbr1
    LANG:C++
    TASK:gift1
    */
    #include <stdio.h>
    #include <string>
    #include <map>
    #include <iostream>
    using namespace std;
    struct person
    {
    	string name;
    	int gave[10],have,cnt,receive;
    	person(){have=receive=0;}
    }a[10];
    map<string,int>link;//这只是方便从人名找到编号而已 
    void gavemoney(int x)
    {
    	if(a[x].cnt==0)return;//小心除以0了(也就是如果给的人数为0就不给了) 
    	int per=a[x].have/a[x].cnt;//计算每人多少钱 
    	int tot=per*a[x].cnt;//计算一共给多少钱 
    	a[x].receive+=a[x].have-tot;//计算自己的零钱 并汇入收到的钱里面 
    	for(int i=0;i<a[x].cnt;i++)//给钱 
    		a[ a[x].gave[i] ].receive += per;
    }
    void display(int x)
    {
    	cout << a[x].name << " " << a[x].receive-a[x].have << "
    ";
    }
    int main()
    {
    	freopen("gift1.in","r",stdin);
    	freopen("gift1.out","w",stdout);
    	string tmp;
    	int n,x,t1,t2;
    	cin >> n;
    	for(int i=0;i<n;i++)
    	{
    		cin >> tmp;
    		a[i].name=tmp;
    		link[tmp]=i;
    	}
    	for(int i=0;i<n;i++)
    	{
    		cin >> tmp;
    		x=link[tmp];
    		cin >> t1 >> t2;
    		a[x].have=t1;
    		a[x].cnt=t2;
    		for(int j=0;j<a[x].cnt;j++)
    		{
    			cin >> tmp;
    			a[x].gave[j]=link[tmp];
    		}
    	}
    	for(int i=0;i<n;i++)
    		gavemoney(i);
    	for(int i=0;i<n;i++)
    		display(i);
    	fclose(stdin);
    	fclose(stdout);
    	return 0;
    }
    
  • 相关阅读:
    ztree学习---将默认勾选的展开
    CentOS之RPM
    CentOS之文档的压缩与打包
    CentOS之Vim
    CentOS用户和用户组管理
    Linux CentOS更改文件的权限
    CentOS的文件属性:命令 ls -l
    CentOS命令
    Java解析excel
    easyUI的combotree的树的懒加载。
  • 原文地址:https://www.cnblogs.com/oier/p/5634377.html
Copyright © 2020-2023  润新知