这一题挺简单的,可是若是是纯模拟的话。会十分麻烦c++
这里介绍一个\(STL\)映射\(map\)数组
\(map\)的最大优势是可使用任意数据类型做为数组的下标spa
\(map\)的定义形式为 map< 下标类型 , 存放的数据类型 > 数组名code
如: \(map<string ,int >ans\)ci
\(map\)的使用方法与普通数组无异string
\(map\)数组中值默认为\(0\)it
此题所需注意的点class
贪婪者送出去的钱是要减去的map
x%y&&y!=0 不然会 \(RE\)数据类型
#include "bits/stdc++.h" using namespace std; int n,num,money; string name[11]; map<string,int>ans;//map定义 int main() { scanf("%d",&n); for(int i=1;i<=n;i++) cin>>name[i]; for(int i=1;i<=n;i++) { string na; cin>>na>>money>>num; ans[na]-=money;//先减去,反正后面不能分完会加回来 if(!num) {//特判 被模数 if(money) ans[na]+=money;//若是有钱,收入本身囊中 continue; } if(!money)//没钱,免谈!!! continue; if(money%num)//判断是否有剩余 ans[na]+=(money%num),money-=(money%num); for(int j=1;j<=num;j++) cin>>na,ans[na]+=(money/num);//把分出去的钱加上收礼者的数组里 } for(int i=1;i<=n;i++) cout<<name[i]<<' '<<ans[name[i]]<<endl;//输出 return ac; }
手动防抄袭