P8685 [蓝桥杯 2019 省 A] 外卖店优先级

该文章是关于蓝桥杯竞赛中的一道模拟题目,主要涉及对外卖店优先级的处理。代码实现了一个算法,通过维护每个外卖店接到订单的时间(head数组)和优先级(w数组),在处理订单消息时更新优先级并判断是否进出队列。最后计算在特定时间点各店的优先级并得出在队列中的店铺数量。
摘要由CSDN通过智能技术生成

题目链接:[蓝桥杯 2019 省 A] 外卖店优先级 - 洛谷

标签:模拟

思路:

思路同领接表,开一个head数组存储上一次外卖店 i 接到订单的时间。

每次处理订单消息时,先计算这天的前一天他的优先度,判断他是否出队,再加2得到这天的优先度,判断他是否入队。

处理完所有订单后,计算所有店在 t 时刻的优先度,并判断他们是否在队列中

代码:

#include<iostream>
#include<algorithm>
using namespace std;

const int N = 100005;
typedef pair<int,int>PII;
int head[N],w[N],st[N];
int n,m,t;
int ts,id;
int ans;
PII vlog[N];

int main()
{
    cin>>n>>m>>t;
    for(int i=0;i<m;++i)
    {
        cin>>ts>>id;
        vlog[i]={ts,id};
    }

    sort(vlog,vlog+m);

    for(int i=0;i<m;++i)
    {
        ts=vlog[i].first;
        id=vlog[i].second;

        w[id]-=max(0,ts-head[id]-1);
        if(w[id]<0) w[id]=0;

        if(w[id]<=3) st[id]=false;

        w[id]+=2;
        if(w[id]>5) st[id]=true;
        
        head[id]=ts;
    }

    for(int i=1;i<=n;++i)
    {
        w[i]-=t-head[i];
        if(w[i]<0) w[i]=0;
        if(w[i]<=3) st[i]=false;
    }

    for(int i=1;i<=n;++i) if(st[i]) ans++;

    cout<<ans<<endl;

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值