吐槽
题目
![]()
解析
#include<bits/stdc++.h>
using namespace std;
const int N=100001;
struct node{int time,id;};
node a[N];
int order[N],prior[N],flag[N];
bool cmp(node a,node b)
{
if(a.id==b.id){
return a.time<b.time;
}
return a.id<b.id;
}
int main()
{
int n,m,T;
cin>>n>>m>>T;
for(int i=0;i<m;i++){
cin>>a[i].time>>a[i].id;
}
sort(a,a+m,cmp);
/*此时订单序列按照id顺序排列,相同id之间是按时间排列*/
for(int i=0;i<m;i++){
int tt=a[i].time,id=a[i].id;
if(tt!=order[id])//当前订单店不是上一家的
prior[id]-=tt-order[id]-1;//每隔一个时间,优先级要减一
prior[id]=prior[id]<0?0:prior[id];
if(prior[id]<=3) flag[id]=0;//去除优先级队列
prior[id]+=2;//有订单的店,每单加2
if(prior[id]>5) flag[id]=1;
order[id]=tt;
}
for(int i=1;i<=n;i++) //最后处理第T时刻
if(order[i]<T){
prior[i] -= T-order[i];
if(prior[i]<=3)
flag[i]=0;
}
int ans=0;
for(int i=0;i<=n;i++)
if(flag[i])
ans++;
cout<<ans;
return 0;
}