ZOJ 3607 Lazier Salesgirl(贪心啊 )

来源:互联网 发布:如何验证php安装成功 编辑:程序博客网 时间:2024/06/02 12:49

题目链接: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

241 2 3 41 3 6 1044 3 2 11 3 6 10

Sample Output

4.000000 2.5000001.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;}


0 0