蓝桥杯 外卖店的优先级

题目描述
“饱了么”外卖系统中维护着 N NN 家外卖店,编号 1 ∼ N 1∼N1∼N。

每家外卖店都有一个优先级,初始时 (0 00 时刻) 优先级都为 0 00。

每经过 1 11 个时间单位,如果外卖店没有订单,则优先级会减少 1 11,最低减到 0 00;而如果外卖店有订单,则优先级不减反加,每有一单优先级加 2 22。

如果某家外卖店某时刻优先级大于 5 55,则会被系统加入优先缓存中;如果优先级小于等于 3 33,则会被清除出优先缓存。

给定 T TT 时刻以内的 M MM 条订单信息,请你计算 T TT 时刻时有多少外卖店在优先缓存中。

输入格式
第一行包含 3 33 个整数 N , M , T 。 N,M,T。N,M,T。

以下 M MM 行每行包含两个整数 t s tsts 和 i d idid,表示 t s tsts 时刻编号 i d idid 的外卖店收到一个订单。

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

数据范围
1 ≤ N , M , T ≤ 105 , 1≤N,M,T≤105,1≤N,M,T≤105,
1 ≤ t s ≤ T , 1≤ts≤T,1≤ts≤T,
1 ≤ i d ≤ N 1≤id≤N1≤id≤N

输入样例1:
2 6 6
1 1
5 2
3 1
6 2
2 1
6 2
1
2
3
4
5
6
7
输出样例1:
1

#include <iostream>
#include <cstdio>
#include<time.h>
#include<vector>
#include<algorithm>
#include<string>
#include<fstream>
#include<map>
using namespace std;
typedef pair<int, int> pii;
bool mysort(const pii& a, const pii& b) {
	if (a.first != b.first)
		return a.first < b.first;
	else return a.second < b.second;
}
int  book[10000][10000] = { 0 };
int main() {
	
	int n, m, t;
	cin >> n >> m >> t;
	vector<int> store;
	for (int i = 0; i < n; i++) {
		store.push_back(0);
	}
	vector<pii> pa;
	for (int i = 0; i < m; i++) {
		int fi, se;
		cin >> fi >> se;
		se--;
		pii pi = { se,fi };
		pa.push_back(pi);
	}
	sort(pa.begin(), pa.end(), mysort);
	int pre = 0;
	for (int i = 0; i < pa.size(); i++) {
		book[pa[i].first][pa[i].second]++;
	}
	cout << "done";
	for (int i = 0; i < n; i++) {
		for (int j = 1; j <= t; j++) {
			if (book[i][j] == 0) {
				if (store[i] == 0) continue;
				else store[i]--;
			}
			else store[i] += 2*book[i][j];
		}
	}
	int ans = 0;
	for (int i = 0; i < store.size(); i++) {
		cout << store[i] << "!" << endl;
		if (store[i] > 5) ans++;
	}
	cout << ans;
}

一个数组 若要开10000*10000及以上的空间 需要设置成全局数组,局部数组只能分配2M

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值