20:00:28 2011-05-06 题意:有中文网页,不解释. 思路:正常思维,模拟. 注意:取平均值时不能除零. 代码: #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> using namespace std; int n; char name[11][20]; int search(char s[]) { int i; for(i=0; i<n; i++) if(strcmp(s,name[i]) == 0) return i; return 0; } int main(void) { FILE *fin = fopen("gift1.in","r"); FILE *fout = fopen("gift1.out","w"); int i; int gift[11]; fill(gift,gift+11,0); fscanf(fin, "%d",&n); for(i=0; i<n; i++) fscanf(fin, "%s",name[i]); for(i=0; i<n; i++) { int val=0, num, j, ave, loc; char send[20]; fscanf(fin, "%s",send); fscanf(fin, "%d %d",&val, &num); loc = search(send); gift[loc] -= val; if(num) { gift[loc] += val-val/num*num; ave = val/num; } for(j=0; j<num; j++) { char ac[20]; fscanf(fin, "%s",ac); loc = search(ac); gift[loc] += ave; } } for(i=0; i<n; i++) fprintf(fout, "%s %d/n",name[i],gift[i]); return 0; }