• 等待时间clientNYOJ 179 LK's problem


    首先声明,我是一个菜鸟。一下文章中出现技术误导情况盖不负责

        时光限制:

        3000

     ms  |  内存限制:

        65535

     KB

        难度:

        1

    2
    1 2
    1 10
    1
    10 
    50 50
    0

        

    样例输出

        

    21
    60

        题意

        

        银行开门之前,一些人已经在门口等着办理业务。一个人等待的时光=开门前等待时光+开门后排队时光+办理业务所用时光。每一个人办理业务所用时光雷同,且看门后没有新增的人。问如何布置这些人的顺序,能够使得等待时光最长的那个人等待的时光最短。求等待时光最长的那个人等待的时光的最小值。

               每组数据先输入一个N,代表有N个人,第二行有N个数,代表每一个人在银行开门前的等待时光,第三行有二个数,分别代表银行服务人员的个数和每一个人办理业务所用的时光(每一个人所用时光雷同).输出等待时光最长的那个人等待的时光的最小值。

                 刚开始看完这个题,我的想法是这样的:先对每一个人的等待时光排序,然后求出开门前等待时光最短的那个人所用的时光就好了。后来细心想想不可,比如

        每日一道理
    青春是用意志的血滴和拼搏的汗水酿成的琼浆——历久弥香;青春是用不凋的希望和不灭的向往编织的彩虹——绚丽辉煌;青春是用永恒的执著和顽强的韧劲筑起的一道铜墙铁壁——固若金汤。

        5

        1 2 3 4 5

        2 1

        这组数据,如果用那种方法做,最短时光为3,而实际上应该是6。

        所以应该是先对开门前等待时光排序后,求出每一个人所用的时光(开门前等待时光长的先办理),然后再对每一个人所用时光排序,输出最大的那个时光即可。感到有点贪心算法的思想。

        代码:

        

        #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int main() { int n,a[102],i,t,c,min,s[102],j,p; while(~scanf("%d",&n)&&n) { for(i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n);/*对开门前的等待时光排序*/ scanf("%d%d",&c,&t); memset(s,0,sizeof(s)); j=0,p=1; for(i=n-1;i>=0;i--) { if(j==c) { p++; j=0; } j++; s[i]=a[i]+p*t; /*求出每一个人所用的时光*/ } sort(s,s+n); /*再次排序*/ printf("%d\n",s[n-1]); /*输出最大值*/ } return 0; }

        

     

    文章结束给大家分享下程序员的一些笑话语录: 这年头的互联网真是娱乐了中国,网民们从各种各样的“门”里钻来钻去,又有好多“哥”好多“帝”,值得大家品味不已……网络经典语录,关于IT与互联网,经典与您分享!

    --------------------------------- 原创文章 By
    等待时间和client
    ---------------------------------

  • 相关阅读:
    CentOS 7 调整home大小
    跨站请求拦截
    SVN操作
    openoffice安装
    MySQL报错ERROR 1436 (HY000): Thread stack overrun:
    jolokia配置Java监控
    elasticksearch分词,导致kibana的url出现问题
    C语言scanf跳出循环的问题
    Jenkins远程代码执行漏洞
    ActiveMQ FileServer漏洞(详细)
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3100667.html
Copyright © 2020-2023  润新知