第十届蓝桥杯A组(C/C++组) 外卖店优先级

 

思路:

这道题还是枚举的思路,另外还运用到了vector容器。就是按时间一个一个出订单,没出一个判断一次,判断此刻店的状态。把问题划分为一家一家店的小问题。

 

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int maxm = 100000;
vector<int> a[maxm];//用vector记录每家外卖店的订单信息
int n, m, t;
int max(int a, int b)//这个函数包含在头文件<algorithm>中,可以不写
{
	if (a < b)
		return b;
	else
		return a;
}
bool f(int x)
{

	if (a[x].size() == 0)
		return 0;
	sort(a[x].begin(), a[x].end());//先按时间进行排序每家的订单信息
	bool ret = 0;
	int now = 2;//因为没有订单永远为0,所以先让进第一个订单开始
	for (int i = 1; i < a[x].size(); i++)//从第二个订单开始
	{
		now = max(0, now - (a[x][i] - a[x][i - 1]-1 ));//判断在下一个订单到来之前,等级是否已经降到0;
		if (now <= 3)//退出优先缓存
			ret = 0;
		now += 2;//每有一个订单+2
		if (now > 5)
			ret = 1;
	}
	now = max(0, now - (t - a[x][a[x].size() - 1]));//当最后一个订单时间刻度不为t时
	if (now <= 3)//到最后时刻不达标就退出
		ret = 0;
	return ret;
}


int main()
{
	cin >> n >> m >> t;
	while (m--)
	{
		int ts, id;
		cin >> ts >> id;
		a[id].push_back(ts);//vector进入新元素
	}
	int ans = 0;
	for (int i = 1; i <= n; i++)
	{
		if (f(i) == true)
			ans++;
	}
	cout << ans;
	system("pause");
	return 0;
}

上面还是有点小问题的,看下面这个:

https://blog.csdn.net/weixin_43535668/article/details/109020151

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值