[ACM_模拟][ACM_暴力] Lazier Salesgirl [暴力 懒销售睡觉]

 

Description

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


题目大意:T种情况,每种n个客人,第i个客人可赚p[i]元钱,第i个客人t[i]时间来,卖东西的很懒,如果w时间内没人来就睡觉,一觉不起,求最大人均赚的钱同时输出最小w.
解题思路:暴力枚举每次在第i个顾客来后睡。用w[i]保存想赚第i个人w的最小值,用av[i]保存赚前i个顾客的平均值。如果在第i个顾客来后睡觉就要满足w[i]<w[i+1](这个式子表明第i和第i+1个顾客之间的时间间隔比之前的都大,所以可以取w=w[i]来在这点后睡觉不醒)

 1 #include<iostream>
 2 #include<string.h>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<string>
 6 using namespace std;
 7 int main(){
 8     int T;cin>>T;
 9     while(T--){
10         int n;cin>>n;
11         int p[1002],t[1002];
12         //w[i]表示赚第i个人需要w的最小值;av[i]表示前i个的人均赚钱数
13         double w[1002],av[1002];
14         double sum=0;
15         for(int i=0;i<n;i++){
16             cin>>p[i];
17             sum+=p[i];
18             av[i]=sum/(i+1);
19         }
20         double max_w=-1;
21         for(int i=0;i<n;i++){
22             cin>>t[i];
23             if(i!=0){
24                 if(t[i]-t[i-1]>max_w){
25                     max_w=t[i]-t[i-1];
26                     w[i]=max_w;
27                 }else w[i]=max_w;
28             }
29             else {
30                 max_w=t[0];
31                 w[i]=max_w;
32             }
33         }w[n]=1312312313;//w[n]赋值很高
34         
35         int pos=0;double max_av=-1;//暴力枚举在i点睡着
36         for(int i=0;i<=n;i++){
37             if(w[i]<w[i+1]){
38                 if(av[i]>max_av){
39                     max_av=av[i];
40                     pos=i;
41                 }
42             }
43         }
44 
45         printf("%.6lf %.6lf\n",w[pos],av[pos]);
46     }return 0;
47 }

 

posted @ 2014-03-16 16:20  beautifulzzzz  阅读(559)  评论(0编辑  收藏  举报