河南省蓝桥杯第十届省赛-7-外卖店优先级

题目描述:

【问题描述】 “饱了么”外卖系统中维护着 N 家外卖店,编号 1 ∼ N。每家外卖店都有 一个优先级,初始时 (0 时刻) 优先级都为 0。 每经过 1 个时间单位,如果外卖店没有订单,则优先级会减少 1,最低减 到 0;而如果外卖店有订单,则优先级不减反加,每有一单优先级加 2。 如果某家外卖店某时刻优先级大于 5,则会被系统加入优先缓存中;如果 优先级小于等于 3,则会被清除出优先缓存。 给定 T 时刻以内的 M 条订单信息,请你计算 T 时刻时有多少外卖店在优 先缓存中。

【输入格式】 第一行包含 3 个整数 N、M 和 T。 以下 M 行每行包含两个整数 ts 和 id,表示 ts 时刻编号 id 的外卖店收到 一个订单。

【输出格式】 输出一个整数代表答案。

【样例输入】 2 6 6 1 1 5 2 3 1 6 2 2 1 6 2

【样例输出】 1

【样例解释】 6 时刻时,1 号店优先级降到 3,被移除出优先缓存;2 号店优先级升到 6, 加入优先缓存。所以是有 1 家店 (2 号) 在优先缓存中。

【评测用例规模与约定】 对于 80% 的评测用例,1 ≤ N, M, T ≤ 10000。 对于所有评测用例,1 ≤ N, M, T ≤ 100000,1 ≤ ts ≤ T,1 ≤ id ≤ N。

分析:

很简单的逻辑,只要注意判断优先缓存的建立与消除就好

代码如下:

#include
using namespace std;
int n,m,t;
struct shop{
	int num=-1;
	int priority=0;
	int ifprior=0;
};
shop s[100005];
int dd[100005][3];
void quicksort(int left,int right);
int partation(int left,int right);
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		s[i].num=i;
	}
	cin>>m;
	cin>>t;
	for(int i=1;i<=m;i++)
	{
		cin>>dd[i][1];
		cin>>dd[i][2];
	}
	
	//cout<<"hello"<5)
					s[i].ifprior=1;
			}
			if(temp==0)
			{
				s[i].priority--;
				if(s[i].ifprior==1&&s[i].priority<3)
					s[i].ifprior=0;
			}
		}
	}
	int sum=0;
	for(int i=1;i<=n;i++)
	{
		if(s[i].ifprior==1)
			sum++;
	} 
	cout<=right)
	return left;
	int temp1=dd[left][1];
	int temp2=dd[left][2];
	int low=left;
	int high=right;
	while(low=temp1) high--;
		dd[low][1]=dd[high][1];
		dd[low][2]=dd[high][2];
		while(low

 

你可能感兴趣的:(蓝桥杯,算法)