zoukankan      html  css  js  c++  java
  • [蓝桥杯][2019年第十届真题]外卖店优先级

    从样例可看出同一外卖店某一时刻可能会有多个订单。

    我们先将订单按时间排序,再按外卖店编号排序,这样同一时刻若存在多个订单,外卖店编号相等的一定相邻。

    对某一时刻(T_i)的订单来说,我们累加该时刻同一外卖店编号的所有订单产生的优先级。

    在累加优先级前,先计算出外卖店距离上次产生订单的时刻至(T)时刻时间内,由于没有订单所带来的优先级的减少。

    之后累加(T_i)时刻所有订单带来的的优先级的增加。

    最后再对最终的(T)时刻特殊处理一下即可。

    注意点

    并不需要真的将优先级大于(5)的外面店加入缓存队列中,只需一个标记数组表明是否在队列中即可。

    const int N=1e5+10;
    PII a[N];
    int level[N];
    int last_time[N];
    bool vis[N];
    int n,m,t;
    
    int main()
    {
        cin>>n>>m>>t;
    
        for(int i=0;i<m;i++)
            cin>>a[i].fi>>a[i].se;
        sort(a,a+m);
    
        for(int i=0;i<m;)
        {
            int j=i;
            while(j<m && a[j] == a[i]) j++;
            int tim=a[i].fi,id=a[i].se;
            level[id]-=tim-last_time[id]-1;
            level[id]=max(level[id],0);
            if(level[id] <= 3) vis[id]=false;
    
            level[id]+=(j-i)*2;
            if(level[id] > 5) vis[id]=true;
    
            last_time[id]=tim;
            i=j;
        }
    
        for(int i=1;i<=n;i++)
            if(last_time[i] < t)
            {
                level[i]-=t-last_time[i];
                if(level[i] <= 3) vis[i]=false;
            }
    
        int res=0;
        for(int i=1;i<=n;i++)
            if(vis[i])
                res++;
    
        cout<<res<<endl;
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    ADO.NET入门教程(五) 细说数据库连接池
    Delphi下使用指针的简单总结
    Delphi
    Delphi
    Delphi
    TXLSReadWriteII5 单元格读写
    [Delphi]Delphi开发的一些技巧
    TXLSReadWriteII2版本导出Excel文件:
    Tomcat使用startup启动,一闪而过,如何查看出错信息
    【转】Java保留固定小数位的4种方法
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14587258.html
Copyright © 2011-2022 走看看