题目:有N家外卖店,每个外卖店都有一个优先级,初始时刻优先级为0。每经过一个时间单位,如果没有订单,则优先级减1;如果有订单,优先级不减反加,每有一单优先级加2。对于某一时刻某家外卖店的优先级大于5,则会被加入优先缓存;小于等于3就会被清除出优先缓存。
给定T时刻内的M条订单信息,计算出T时刻有多少外卖店在优先缓存中?
输入:第一行包含三个整数N,M,T
输出:一个整数代表答案
解题思路:
暴力解法:
使用map[N]数组存储某一外卖店在某一时刻接收到的订单数。
例如用map[i][j](表示map[i]中键为j的值),来表示i外卖店在j时刻接收到的订单数。
同时需要设置一个flag来表示该外卖店是否在优先缓存中。
最后暴力遍历每个外卖店在每个时刻接收到的订单数。
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5+10;
int n, m, t;
map<int, int> mp[N];
int res, flag, ans = 0;
signed main(){
cin >> n >> m >> t;
for(int i = 0; i<m; i++){
int ts, id;
cin >> ts >> id;
mp[id][ts]++;
}
for(int i = 1; i<=n; i++){
res = 0;
flag = 0;
for(int j = 1; j<=t; j++){
if(mp[i].find(j)!=mp[i].end()){
res += 2*mp[i][j];
if(res>5) flag = 1;
}
else if(res>0){
res--;
if(res<=3) flag = 0;
}
}
if(flag) ans++;
}
cout << ans;
return 0;
}