zoukankan      html  css  js  c++  java
  • 天天寄快递

    思路:

      就是模拟,但有几个地方需要注意。

      1结果可能会很大,要开longlong。(这我注意到了)

      2要先把每个公司的得分加到K,(我就在 给每个数据的对应公司加分时出错了)

    #include<iostream>
    #include<queue>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<vector>
    using namespace std;
    #define N 1000009
    int n,m,s,k;
    struct node{
        int e,t;
    }q[N];
    long long mark,tot,cnt,dt;
    bool cmp( node  a,node b)
    {
        if(a.e != b.e)    return a.e<b.e;
        else    return a.t > b.t;        
    }
    bool cmpp( node  a,node b)
    {
        return a.t>b.t;        
    }
    int main()
    {
        scanf("%d%d%d%d",&n,&m,&s,&k);
        if(s<n)
        {
            cout<<-23333333;
            return 0;
        }
        
        for(int i=1,e,t;i<=m;i++)    
        {
            scanf("%d%d",&e,&t);
            if(t>=2)
                q[++cnt].e=e,q[cnt].t=t;
        }
        sort(q+1,q+1+cnt,cmp);
        for(int i=1;i<=n;i++)
        {
            while(q[dt].e<i)
                dt++;
            dt--;    //开始没加这一步,给公司加分时,弄错了
            tot=0;
            while(tot<k&&s>=1)        
                tot+=1LL*q[++dt].t-2,s--,q[dt].t=0;
            if(tot<k)
            {
                cout<<-23333333;
                return 0;
            }
            mark+=tot;
        }
        sort(q+1,q+cnt+1,cmpp);
        for(int i=1;i<=s;i++)
        if(q[i].t>=2)
        mark+=1LL*q[i].t-2;
        cout<<mark;
        return 0;
    }

    小样例:

    输入:

      

    2 5 2 22
    1 32
    1 40
    2 25
    2 32
    2 0

    输出:

    68

  • 相关阅读:
    pyinstaller 打包后无法运行
    Android Uiautomator2 gradlew 坑
    JNDI 在 J2EE 中的角色
    23种设计模式
    Struts2工作原理
    SpringMVC工作原理
    堆内存设置
    安装和使用 memcached
    SQL面试题及答案
    30多条mysql数据库优化方法,千万级数据库记录查询轻松解决
  • 原文地址:https://www.cnblogs.com/CLGYPYJ/p/7616923.html
Copyright © 2011-2022 走看看