思路:
这道题还是枚举的思路,另外还运用到了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