#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; }
原文:https://www.cnblogs.com/lvjt0208/p/14659700.html