首页 > 其他 > 详细

ZOJ 3607 Lazier Salesgirl(贪心啊 )

时间:2015-04-19 22:52:44      阅读:217      评论:0      收藏:0      [点我收藏+]

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4710


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

Author: WU, Zejun
Contest: The 9th Zhejiang Provincial Collegiate Programming Contest


代码如下:

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int max(int a, int b)
{
	if(a > b)
	{
		return a;
	}
	return b;
}
int main()
{
	int T;
	int n;
	int p[1017], t[1017];
	scanf("%d",&T);
	while(T--)
	{
		int i, j;
		scanf("%d",&n);
		for(i = 0;  i < n; i++)
		{
			scanf("%d",&p[i]);
		}
		for(i = 0;  i < n; i++)
		{
			scanf("%d",&t[i]);
		}
		int c[1017];
		c[0] = t[0];
		for(i = 1; i < n; i++)
		{
			c[i] = max(c[i-1], t[i]-t[i-1]);
		}
		double sum = 0;
		double w, ave = 0;
		for(i = 0; i < n; i++)
		{
			double tt = c[i];
			sum = 0;
			for(j = 0; j < n; j++)
			{
				if(tt >= c[j])
				{
					sum+=p[j];
				}
				else
				{
					break;
				}
			}
			if(sum/j > ave)
			{
				ave = sum/j;
				w = c[i];
			}
		}
		printf("%.6lf %.6lf\n",w,ave);
	}
	return 0;
}


ZOJ 3607 Lazier Salesgirl(贪心啊 )

原文:http://blog.csdn.net/u012860063/article/details/45132857

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!