AcWing 1241. 外卖店优先级
原题链接
简单
作者:
戾儿
,
2021-04-05 21:13:18
,
所有人可见
,
阅读 300
(模拟)
C++ 代码
#include <bits/stdc++.h>
using namespace std;
int n,m,t;
const int N=100101;
int st[N],score[N],e[N];//st标记是否在优先缓存 score标记店铺上次有订单的时间
//e 标记优先级
struct node
{
int ts,id;
}a[N];
int cmp(node a,node b)//结构体的比较函数
{
if(a.ts==b.ts) return a.id<b.id;
return a.ts<b.ts;
}
int main()
{
cin>>n>>m>>t;
for(int i=0;i<m;i++) cin>>a[i].ts>>a[i].id;
sort(a,a+m,cmp);
for(int i=0;i<m;i++)
{
int tt=a[i].ts,num=a[i].id;
if(tt!=score[num]) e[num]-=tt-score[num]-1;//优先级进行更改
e[num]=max(0,e[num]);//优先级不能小于0
if(e[num]<=3) st[num]=0;//移除优先缓存
e[num]+=2;
if(e[num]>5) st[num]=1;
score[num]=tt;//更新上次订单时间
}
for(int i=1;i<=n;i++)//遍历所有店铺最后订单的时间
{
if(score[i]<t) e[i]-=t-score[i];
if(e[i]<=3) st[i]=0;
}
int res=0;
for(int i=1;i<=n;i++)
{
if(st[i]) res++;
}
cout<<res<<endl;
return 0;
}