这题就是模拟每个人送钱和收钱的过程,要注意的地方是,由于收到的钱都是整数,所以在每一次送钱之后,送钱的人需要加上无法除尽余下的钱。。
#include <iostream> #include <algorithm> #include <map> #include <string> #include <cstdio> using namespace std; const int INF = 0x7f7f7f7f; map<string,int>mp; int main() { int n,m,t,i,j; string s[20],str; cin>>n; mp.clear(); for(i=0;i<n;i++) cin>>s[i]; for(i=0;i<n;i++) { cin>>str; cin>>m>>t; mp[str]-=m; if(t) mp[str]+=(m-m/t*t); for(j=0;j<t;j++) { cin>>str; mp[str]+=(m/t); } } for(i=0;i<n;i++) cout<<s[i]<<" "<<mp[s[i]]<<endl; return 0; }