zoukankan      html  css  js  c++  java
  • 死亡

    【问题描述】

      现在有M个位置可以打sif,有N+1个人在排队等着打sif。现在告诉你前N个人每个人需要多长的时间打sif,问你第N+1个人什么时候才能打sif。(前N个人必须按照顺序来)

    【输入格式】

      第一行两个整数N,M如上所述。

      接下来N行每行一个整数代表每个人所需要用的时间。

    【输出格式】

      一行一个整数表示答案

    【样例输入】

      3  2

      1

      1

      1

    【样例输出】

      1

    【样例解释】

      山里有座庙。

    【数据规模与约定】

      对于100%的数据,每个人所需用的时间不超过10^5.

    【题目分析】

      首先这个我们很容易看出来第一个测试点输出N个数中的最小值就可以了。

      好吧,不扯了,说一下正解。

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <queue>
    #define ll long long
    using namespace std;
    int n,m;
    int a[100010];
    priority_queue<ll>heap;
    int main()
    {
        freopen("death.in","r",stdin);
        freopen("death.out","w",stdout);
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        for(int i=1;i<=m;i++)//先给m个位置加入元素 
            heap.push(0);
        for(int i=1;i<=n;i++)
        {
            ll now=heap.top();//先把最大的元素取出来,实际上是最小的,因为取了他的负数 
            heap.pop();//删掉 
            now=-now;//把负数变为正数 
            now+=a[i];//加上新元素的时间来打sif 
            now=-now;//变为负数 
            heap.push(now);//加入堆中 
        }
        long long ans=1e17+10;
        for(int i=1;i<=m;i++)
        {
            ans=min(ans,-heap.top());//heap中都是负数,所以这里比较时先变为正数 
            heap.pop();
        }
        cout<<ans;
        fclose(stdin);fclose(stdout);
        return 0;
    }
    lemon
  • 相关阅读:
    JAVA正则表达式matcher.find()和 matcher.matches()的区别
    Mysql面试题
    Mysql常见的错误码
    关于Spring的69个问题
    Exception总结
    JDK5-8特性归纳
    TCP和UDP的区别
    log4j介绍和使用
    tomcat项目中配置数据库连接池
    Mybatis简介、环境搭建和详解
  • 原文地址:https://www.cnblogs.com/xiaoningmeng/p/6032548.html
Copyright © 2011-2022 走看看