1458: [蓝桥杯2019初赛]外卖店优先级(c++暴力无脑解法)

##1458: [蓝桥杯2019初赛]外卖店优先级(c++究极暴力无脑解法
【问题描述】

饱了么”外卖系统中维护着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

思路:
1.他需要求的是T时刻多少优先缓存,那么我们只需要每次专门判断其中一家店是否优先缓存。如果符合就res++
2.那么如何判断是否优先缓存呢,在输入的时候,记录每次输入的时刻出现的次数,即单位时间外卖份数
从时间1一直循环到T:
如果当前外卖份数为0,则优先级-1(注意不能小于0);
如果当前外卖份数不为0,则优先级+=2*外卖数;
最后每一时刻都需要判断是否为优先缓存 【优先级>5 ??? 优先级<=3】

话不多说,上代码:

#include<bits/stdc++.h>
using namespace std;
const int n=100010;
int a[120*n];
//这个数组【120*i+j】代表i店j时刻的外卖数
//这里最好别学我搞这种,建议用结构体或其他方式
int b[n];
//b存优先级
int main()
{
	int N,M,T;
 	cin>>N>>M>>T;
 
 	for(int i=1;i<=M;i++)
 	{
 		int x,y;
 		 cin>>x>>y;
  		 a[y*120+x]++;//第y家店第x时刻的外卖 
 	}

	//每家店都判断一次
	int res=0; //最后结果
 	bool youxian;//当前是否是优先缓存
 	for(int i=1;i<=N;i++)
 	{
 		youxian=false;
  		for(int j=1;j<=T;j++)
  		{
  			if(a[i*120+j])//不为0就加
  			b[i]+=2*a[i*120+j];
  			else//否则减
  			b[i]=max(0,b[i]-1);
			
			//优先判断
			if(b[i]<=3)youxian=false;
    			if(b[i]>5)youxian=true;
  		}
  		if(youxian)res++;
 	}
 	cout<<res<<endl;
 	return 0;
}

猜你喜欢

转载自blog.csdn.net/bwabdbkjdbkjwabd/article/details/107990762