Lazier Salesgirl
题目链接:ZOJ - 3607题意:小女孩卖烧饼,如果两位客人来买烧饼的时间相差大于W, 小女孩就会无聊的睡着,并不再醒来, 期间不做生意;
已知第i位客人到达时间为开张后ti时刻, 小女孩卖给第i位客人烧饼的价钱为pi;
问:当小女孩卖出烧饼的平均价钱最大时最小的w是多少?(平均价钱是卖出的总价钱除以卖出的烧饼数);
思路:对每个时间差求出val, 输出最大的val和最小的
#include <iostream>
#include <algorithm>
#include <string.h>
#include <stdio.h>
using namespace std;
int n;
double t[1010], p[1010];
double w[1010];
double val(double x){
double sum=0.0;
int cnt=0;
for(int i=1; i<=n; i++){
if(t[i]-t[i-1]<=x){
sum+=p[i];
cnt++;
}
else break;
}
return sum/(cnt*1.0);
}
int main(){
int T;
cin >> T;
while(T--){
cin >>n;
for(int i=1; i<=n; i++)
scanf("%lf", &p[i]);
for(int i=1; i<=n; i++)
scanf("%lf", &t[i]);
t[0]=0.0;
memset(w, 0, sizeof(w));
for(int i=1; i<=n; i++){
w[i]=max(w[i], t[i]-t[i-1]);
}
sort(w+1, w+n+1);
double ans=0.0, ww=100000.0;
for(int i=1; i<=n; i++){
double tmp=val(w[i]);
if(ans<tmp){
ans=tmp;
ww=w[i];
}
}
printf("%.6f %.6f\n", ww, ans);
}
return 0;
}