额,把题目读懂应该没问题,虽然繁琐,但难度不大.
#include<iostream>
#include<cstdio>
using namespace std;
struct stu
{
string nam;
int old;
int get;
int left;
int ans;
};
int main()
{
int i,j,k,s,t;
cin>>t;
getchar();
stu num[t];
for(i=0;i<t;i++)
{
cin>>num[i].nam;
num[i].ans=0;
num[i].get=0;
num[i].left=0;
num[i].old=0;
}
string people;
int m,n;
for(s=0;s<t;s++)
{
cin>>people;
cin>>m>>n;
if(!n)
{
for(i=0;i<t;i++)
{
if(people==num[i].nam)
{
num[i].old+=m;
}
}
continue;
}
string giv[n];
for(i=0;i<n;i++)
{
cin>>giv[i];
}
for(i=0;i<t;i++)
{
if(people==num[i].nam)
{
num[i].old=m;
int x=m/n;
num[i].left=m-(n*x);
for(j=0;j<n;j++)
{
for(k=0;k<t;k++)
{
if(giv[j]==num[k].nam)
{
num[k].get+=x;
break;
}
}
}
break;
}
}
}
//cout<<num[2].old<<endl;
for(i=0;i<t;i++)
{
num[i].ans=num[i].left+num[i].get-num[i].old;
if(i==t-1){cout<<num[i].nam<<' '<<num[i].ans;}
else{cout<<num[i].nam<<' '<<num[i].ans<<endl;}
}
return 0;
}