题意:这题比上题水太多,这次的小姑娘过了w就一睡不醒,另外都一样。
做法:一样的枚举w,自是现在的每个能遇到每个客人时的w因该是以这个客人和0时刻为断点的时间段中的一个最大的时间段(不能在见到这个客人之前睡着啊),枚举好之后,还有向前看这个姑娘最终睡着的时刻。
#include<cstdio> #include<cstring> const int LMT=100003; double t[LMT],p[LMT],lev[LMT]; double max(double a,double b) { return a>b?a:b; } int main(void) { int i,j,n,T; double sum,ans,anst,w; scanf("%d",&T); while(T--) { sum=ans=anst=0; scanf("%d",&n); for(i=0;i<n;i++) scanf("%lf",&p[i]); for(i=0;i<n;i++) scanf("%lf",&t[i]); lev[0]=t[0]; for(i=1;i<n;i++) lev[i]=max(t[i]-t[i-1],lev[i-1]); for(i=0;i<n;i++) { w=lev[i];sum=0; for(j=0;j<n;j++) if(w>=lev[j]) sum+=p[j]; else break; if(ans<sum/j) { ans=sum/j; anst=w; } else if(ans==sum/j&&anst>w)anst=w; } printf("%.6lf %.6lf\n",anst,ans); } return 0; }