题目链接:点击这里
求 时刻时有多少外卖店在优先缓存中,不能仅仅在最后判断有多少个店铺的优先级大于 ,应该在每个时间单位结束后,都要统计更新加入优先缓存和被清除出优先缓存的店铺数量。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int N = 100010;
int n, m, t;
int a[N];
bool vis[N];
bool inq[N];
struct node {
int ts, id;
}dd[N];
bool cmp(node a, node b)
{
if(a.ts==b.ts) return a.id < b.id;
else return a.ts < b.ts;
}
int main()
{
scanf("%d%d%d", &n, &m, &t);
for(int i = 1; i <= m; ++i) //m条订单
scanf("%d%d", &dd[i].ts, &dd[i].id);
sort(dd+1, dd+m+1, cmp); //排序
// printf("\n");
// for(int i = 1; i <= m; ++i)
// printf("%d %d\n", dd[i].ts, dd[i].id);
int cnt = 1;
int time = 1;
int ans = 0;
while(cnt<=m&&time<=t)
{
memset(vis, false, sizeof(vis));
while(cnt<=m&&dd[cnt].ts==time)
{
vis[dd[cnt].id] = true;
a[dd[cnt].id] += 2;
cnt++;
}
for(int i = 1; i <= n; ++i)
if(!vis[i]&&a[i]>0) a[i]--;
for(int i = 1; i <= n; ++i)
{
if(!inq[i]) //不在优先缓存里
{
if(a[i]>5)
{
inq[i] = true;
ans++;
}
}
else //在优先缓存里
{
if(a[i]<=3)
{
inq[i] = false;
ans--;
}
}
}
time++;
}
printf("%d\n", ans);
return 0;
}