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
  • 相关阅读:
    js秒换成天时分
    vuex
    匹配iPhoneX
    ASP 解析json
    WPF 实现多语言支持
    c# 用DotNetZip来解压/压缩文件
    WPF UI Close button
    VB 获取所有窗体菜单信息
    ASP/ASP.NET/VB6文件上传
    c# 上传图片到一个外链相册服务器
  • 原文地址:https://www.cnblogs.com/xiaoningmeng/p/6032548.html
Copyright © 2011-2022 走看看