zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    servlet 和filter 抛出404等异常
    cassandra 存储list数组
    cassandra 存储二进制data
    ubuntu下安装cpython 0.2x
    mongodb存储二进制数据的二种方式——binary bson或gridfs
    Python中使用Flask、MongoDB搭建简易图片服务器
    kubernetes要实现的目标——随机关掉一台机器,看你的服务能否正常;减少的应用实例能否自动迁移并恢复到其他节点;服务能否随着流量进行自动伸缩
    陈斌:探索技术领导力的最佳实践
    python berkeley DB操作——打开btree索引文件中的database
    什么是AWS Lambda?——事件驱动的函数执行环境
  • 原文地址:https://www.cnblogs.com/clliff/p/3925680.html
Copyright © 2011-2022 走看看