New OJ 1458: [蓝桥杯2019初赛]外卖店优先级(注意审题)

题目链接:点击这里
在这里插入图片描述
在这里插入图片描述

T T 时刻时有多少外卖店在优先缓存中,不能仅仅在最后判断有多少个店铺的优先级大于 5 5 ,应该在每个时间单位结束后,都要统计更新加入优先缓存和被清除出优先缓存的店铺数量。

#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;
} 
发布了748 篇原创文章 · 获赞 113 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/qq_42815188/article/details/104420016