题目链接:[蓝桥杯 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;
}