zoukankan      html  css  js  c++  java
  • 【散列】贪婪的送礼者

    贪婪的送礼者

    思路


    这道题可以用模拟做,但是会很麻烦而且易出错,这道题最好的办法就是用映射,也就是散列表做。
    建立一个把string对象映射为int类型的map,然后用名字做索引,钱数做数据,计算完毕后输出即可。
    另外,为保证名字的输出顺序与输入顺序相同,建议用一个string对象的name数组来依序存储名字。

    Code

    #include<iostream>
    #include<map>
    #include<string>
    using namespace std;
    int n,money,p,num;
    string s,name[12];
    map<string,int> cnt;
    int main()
    {
     	cin>>n;
     	for(int i=1;i<=n;i++)
     		cin>>name[i];
     	for(int i=1;i<=n;i++)
     	{ 
     		cin>>s>>money>>p;
     		if(p!=0) 
             	num=money/p;//特判
     		else 
             	num=0;
     		cnt[s]-=num*p;
     		for(int j=1;j<=p;j++)
     		{
       			string person;
       			cin>>person;
       			cnt[person]+=num;      
      		}     
     	}
     	for(int i=1;i<=n;i++)
     		cout<<name[i]<<" "<<cnt[name[i]]<<endl;
    }
    
  • 相关阅读:
    生成唯一流水码
    搜索类
    数字转中文
    字符串转数组工具类
    类转换
    P1112 区间连续段
    P1113 同颜色询问
    Turtlebot3 机器学习
    Turtlebot2进阶教程
    turtlebot A2
  • 原文地址:https://www.cnblogs.com/gongdakai/p/11236549.html
Copyright © 2011-2022 走看看