H - Lazier Salesgirl ZOJ - 3607

Kochiya Sanae is a lazy girl who makes and sells bread. She is an expert at bread making and selling. She can sell the i-th customer a piece of bread for price pi. But she is so lazy that she will fall asleep if no customer comes to buy bread for more than w minutes. When she is sleeping, the customer coming to buy bread will leave immediately. It's known that she starts to sell bread now and the i-th customer come after ti minutes. What is the minimum possible value of w that maximizes the average value of the bread sold?


Input

There are multiple test cases. The first line of input is an integer T ≈ 200 indicating the number of test cases.

The first line of each test case contains an integer 1 ≤ n ≤ 1000 indicating the number of customers. The second line contains n integers 1 ≤ pi ≤ 10000. The third line contains n integers 1 ≤ ti ≤ 100000. The customers are given in the non-decreasing order of ti.

Output

For each test cases, output w and the corresponding average value of sold bread, with six decimal digits.

Sample Input
2
4
1 2 3 4
1 3 6 10
4
4 3 2 1
1 3 6 10
Sample Output
4.000000 2.500000
1.000000 4.000000
#include<bits/stdc++.h>

using namespace std;
typedef long long ll;

const int maxn=1010;
double val[maxn],t[maxn];
/*
一道题卡的我们简直绝望,觉得我们什么情况都想了
可就是想不出来,觉得我们肯定是没有戏了,感觉实在是太难了
觉得自己一定是别不过来这个弯来,不得不说这个题真的是太牛了

我们只是考虑到一个答案的必要条件,并没有考虑到这是不是就是答案
的充分条件啊,看到答案了,觉得是,当时考虑的不周到,总是很难受,总是差一点,
我不想怎样,但是这个队友真的太自大了,没有办法把,还是努力做好自己吧
 
*/

int main()
{
	int T;
	scanf("%d",&T);
	while(T--){
		int n;
		scanf("%d",&n);
		for(int i=1;i<=n;i++)scanf("%lf",&val[i]);
		for(int i=1;i<=n;i++)scanf("%lf",&t[i]);
		
		double ans=-1,w,sum=0,maxt=-1,ave;
		for(int i=1;i<=n;i++){
			sum+=val[i];
			ave=sum/i;
			maxt=max(maxt,t[i]-t[i-1]);
			if(ave>ans){
				if(i<n&&t[i]+maxt>=t[i+1])continue; //就是这句话,我几近绝望 
				ans=ave;
				w=maxt;
			} 
		}
		printf("%.6f %.6f\n",w,ans);
	}	
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值