题意:这题比上题水太多,这次的小姑娘过了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;
}