很简单一道题, 但是没弄清题意把我害惨了……
#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; }