思路
这道题可以用模拟做,但是会很麻烦而且易出错,这道题最好的办法就是用映射,也就是散列表做。
建立一个把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;
}