Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
请教各位高手,小弟不知道错什么,但是测试用例都过,0的情况都好像没问题,救命啊,谢谢#include "stdio.h" #define MAX 100 int n,h,f[MAX],d[MAX],t[MAX],minute[MAX]; int difference(int a,int n,int d)//n denote rest, { if(d==0) return a*n; if(n>(a/(-1*d)+1)) return (a/(-1*d)+1)*(a+a%(-1*d))/2; else return n*(2*a+(n-1)*d)/2; } void fishing() { int fish=0,i,s[MAX],rest=h*12,temp=0,k,j,k1=0,tempk=0,most=0; for(i=0;i<n;i++) { s[i]=0; minute[i]=0; } k=0;//现在位置 k1=0; s[k]=1; //主算法 while(rest>0) { k1=k; most=0; tempk=0; for(i=0;i<n;i++) { temp=0; if(f[i]==0) continue; if(f[i]>=f[k1]) { for(j=i;j<k1;j++) { if(!s[j+1]) temp=temp+t[j]; } for(j=k1;j<i;j++) { if(!s[j+1]) temp=temp+t[j]; } //求小的等差数列长度n if((temp<rest)&&(difference(f[i],rest-temp,-1*d[i])>most)) { k1=i; most=difference(f[i],rest-temp,-1*d[i]); tempk=temp+1; } } } if(k1!=k) { for(j=k;j<=k1;j++) s[j]=1; for(j=k1;j<=k;j++) s[j]=1; rest-=tempk; k=k1; } else { for(j=0;j<n;j++) { if((s[j]==1)&&(f[j]!=0)) break; } if(j==n) { minute[0]+=rest; break; } else rest--; } fish+=f[k1]; f[k1]-=d[k1]; minute[k1]++; if(f[k1]<0) f[k1]=0; } //主算法结束 for(i=0;i<n-1;i++) { minute[i]*=5; printf("%d,",minute[i]); } minute[i]*=5; printf("%d\n",minute[i]); printf("Number of fish expected:%d\n\n",fish); } void main() { int i; while(scanf("%d",&n),n!=0) { scanf("%d",&h); for(i=0;i<n;i++) scanf("%d",&f[i]); for(i=0;i<n;i++) scanf("%d",&d[i]); for(i=0;i<n-1;i++) scanf("%d",&t[i]); fishing(); } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator