题目不多讲了,具体见:http://www.nocow.cn/index.php/USACO_Training#Section_6.1。这里有详细的分析!
下面我说说自己做这题出现的问题,或许你可能在不经意间也会遇到和我一样的问题。
为题是这样的,我在求解:一个人把他所有的钱分给其他人后他还剩余多少钱时,有一个求模数的操作。注意:0不能用来做模数!(我囧到这里前后差不多1小时,丫的)。
程序如下:
/* ID: Tony PROG: gift1 LANG: C++ */ #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; #define N 20 int main() { freopen("gift1.in","r",stdin); freopen("gift1.out","w",stdout); int num,money,person,nperson[N],summoney[N],curmoney[N]; char buf[N][N],s[N],mm[N]; memset(curmoney,0,sizeof(curmoney)); scanf("%d",&num); for(int i=1;i<=num;i++) scanf("%s",buf[i]); for(int i=1;i<=num;i++) { int cur=1; scanf("%s%d%d",s,&money,&person); while(strcmp(s,buf[cur])!=0) cur++; summoney[cur]=money; nperson[cur]=person; if(person==0) continue; else curmoney[cur]+=summoney[cur]%nperson[cur]; //printf("%d %d %d/n",summoney[cur],curmoney[cur],nperson[cur]); for(int j=1;j<=person;j++) { scanf("%s",s); int t=1; while(strcmp(s,buf[t])!=0) t++; curmoney[t]+=(summoney[cur]/nperson[cur]); } } for(int i=1;i<=num;i++) printf("%s %d/n",buf[i],curmoney[i]-summoney[i]); return 0; }
