• ZOJ 3607 Lazier Salesgirl (贪心)


    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 nintegers 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

    题意:

    T个情况,每个情况有n个客人,第i个客人可赚p[i]元钱,第i个客人t[i]时间来,卖东西的女孩很懒,如果w时间内没人来就睡觉,后面来的客人就会刚来就走,求赚钱的平均值最大同时输出最小w.

    这题采用贪心,如果t[i+1]-t[i]<maxtime时,那么后面一个客人能买到面包,如果t[i+1]-t[i]>maxtime那么就先把当前的情况记录下来,再往后去找

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<stdlib.h>
     4 #include<algorithm>
     5 using namespace std;
     6 const int MAXN=1000+10;
     7 int p[MAXN],t[MAXN];
     8 int main()
     9 {
    10     //freopen("in.txt","r",stdin);
    11     int kase;
    12     scanf("%d",&kase);
    13     while(kase--)
    14     {
    15         int n;
    16         scanf("%d",&n);
    17         memset(p,0,sizeof(p));
    18         memset(t,0,sizeof(t));
    19         for(int i=1;i<=n;i++)
    20             scanf("%d",&p[i]);
    21         for(int i=1;i<=n;i++)
    22             scanf("%d",&t[i]);
    23 
    24         double maxtime=-1,time=0;
    25         double sum=0,av=0;
    26         for(int i=1;i<=n;i++)
    27         {
    28             sum+=p[i];
    29             if(maxtime<t[i]-t[i-1])
    30                 maxtime=t[i]-t[i-1];
    31 
    32             if(maxtime<t[i+1]-t[i]&&sum>av*i)
    33             {
    34                 av=sum/i;
    35                 time=maxtime;
    36             }
    37 
    38             if(i==n)
    39             {
    40                 if(av*i<sum)
    41                 {
    42                     av=sum/i;
    43                     time=maxtime;
    44                 }
    45             }
    46         }
    47         printf("%.6lf %.6lf
    ",time,av);
    48     }
    49     return 0;
    50 }
    View Code
  • 相关阅读:
    在下拉框中选择数据
    代码添加批处理类
    重置用户状态(初始化用户)
    当前窗口控制(显示、隐藏、破坏)
    窗体分隔符实现
    使用USB移动硬盘 遭遇 "Windows无法为Volume加载安装程序。请于硬件供应商联系,寻求协助" 错误,“灰鸽子”后遗症的处理
    使用IDL创建TypeLib(.tlb)文件
    ngrep使用方法
    常用的正则表达式
    治疗鼻炎的药
  • 原文地址:https://www.cnblogs.com/clliff/p/3925680.html
Copyright © 2020-2023  润新知