這一題挺簡單的,可是若是是純模擬的話。會十分麻煩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; }
手動防抄襲