Lazier Salesgirl ZOJ - 3607

 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;
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值