分析
C++ 代码
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
#define efor(i,s,e) for(int i=s;i<=e;i++)
#define ffor(i,s,e) for(int i=s;i<e;i++)
#define out(x) cout<<x<<" "
#define nl cout<<endl
struct node
{
int ts,num;
}a[N];
bool cmp(node s1,node s2)
{
if(s1.ts==s2.ts)return s1.num<s2.num;
return s1.ts<s2.ts;
}
int n,m,t;
int last[N];//id号店的上一次的时间
int vip[N];// 记录当前第几号店的值
bool st[N];//是否在优先缓存队列中
void init(){
scanf("%d%d%d",&n,&m,&t);
for(int i=1;i<=m;i++) scanf("%d%d",&a[i].ts,&a[i].num);
sort(a+1,a+1+m,cmp);//使得输入有序
}
void update(int today,int id){
int det=today-last[id];//跳过了det天没有订单
if(det) vip[id]-=det-1;//好好体会这个减一
if(vip[id]<0) vip[id]=0;
if(vip[id]<=3) st[id]=0;
vip[id]+=2;//加上当天的
if(vip[id]>5) st[id]=1;
last[id]=today;
}
void getAns(){
int ans=0;
efor(i,1,n)
{
if(st[i]) ans++;
}
cout<<ans<<endl;
}
void AcWing(){
init();
efor(i,1,m){
update(a[i].ts,a[i].num);
}
//考虑第t天时各家店的优先级
efor(id,1,n)
{
if(last[id]<t) vip[id]-=(t-last[id]);
if(vip[id]<=3) st[id]=0;
}
getAns();
}
int main()
{
AcWing();
return 0;
}