很简单一道题, 但是没弄清题意把我害惨了……
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
ofstream fout ("gift1.out");
ifstream fin ("gift1.in");
string name[11], temp;
long long n, i, j, k, money[11]={0};
fin >> n;
// cin>>n;
for(i=0; i<n; i++)
{
fin>>name[i];
// cin>>name[i];
}
long long sum, num;
for(i=0; i<n; i++)
{
fin>>temp;
// cin>>temp;
fin>>sum>>num;
// cin>>sum>>num;
if( num==0 ) continue;//原来我写的break;结果不对; 后来我才发现, num=0时不是输入结束的标志
for(k=0; k<n; k++)
{
if( temp==name[k] )
{
money[k]-=sum/num*num;
}
}
for(j=0; j<num; j++)
{
fin>>temp;
// cin>>temp;
for(k=0; k<n; k++)
{
if( temp==name[k] )
{
money[k]+=sum/num;
}
}
}
}
for(i=0; i<n; i++)
{
fout<<name[i]<<" "<<money[i]<<endl;
// cout<<name[i]<<" "<<money[i]<<endl;
}
return 0;
}
用STL写的:
#include<iostream>
#include<fstream>
#include<map>
#include<cstdio>
using namespace std;
int main()
{
ifstream fin("gift1.in");
ofstream fout("gift1.out");
map<string, int> m;
char str[50][15], name[15];
int n, i;
//scanf("%d", &n);
fin>>n;
for(i=0; i<n; i++)
//scanf("%s", str[i]);
fin>>str[i];
int sum, num, temp;
for(i=0; i<n; i++)
{
//scanf("%s %d %d", name, &sum, &num);
fin>>name>>sum>>num;
if( num!=0 )
{
temp=sum/num;
m[name]-=temp*num;
while( num-- )
{
//scanf("%s", name);
fin>>name;
m[name]+=temp;
}
}
}
for(i=0; i<n; i++)
//printf("%s %d\n",str[i], m[str[i]]);
fout<<str[i]<<" "<<m[str[i]]<<endl;
}