zoj 3607 Lazier Salesgirl

来源:互联网 发布:windows编程的书 编辑:程序博客网 时间:2024/06/08 01:38
Lazier Salesgirl

Time Limit: 2 Seconds      Memory Limit: 65536 KB

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
#include <bits/stdc++.h>using namespace std;const int N = 1e4 + 10;int t, n;double p[N], pp[N], v[N], vv[N];struct xx{    double p, v;    int n;}a[N];bool cmp(xx a, xx b){    if(a.p == b.p) return a.v < b.v;    return a.p > b.p;}int main(){    scanf("%d", &t);    while(t--){        scanf("%d", &n);        double sum = 0, maxi = 0;        int ii = 0;        for(int i = 1; i <= n; i++){            scanf("%lf", &p[i]);            p[i] += p[i-1];            //printf("%.3f ", p[i]);        }        //printf("\n");        for(int i = 1; i <= n; i++){            scanf("%lf", &v[i]);            double tmp = v[i]-v[i-1];            vv[i] = max(vv[i-1], tmp);            //printf("%.3f ", vv[i]);        }        //printf("\n");        v[n+1] = 0x3f3f3f3f;        int x = 0;        for(int i = 1; i <= n; i++){            if(vv[i] < v[i+1]- v[i]){                a[x].v = vv[i];                a[x].p = p[i]/i*1.0;                x++;            }        }        sort(a, a+x, cmp);        printf("%.6f %.6f\n", a[0].v, a[0].p);    }}