蓝桥杯真题:外卖优先级
題目描述
"飽了么"外賣系統(tǒng)中維護(hù)著?N?家外賣店,編號 1 ~?N。每家外賣店都有 一個優(yōu)先級,初始時 (0 時刻) 優(yōu)先級都為 0。
每經(jīng)過 1 個時間單位,如果外賣店沒有訂單,則優(yōu)先級會減少 1,最低減 到 0;而如果外賣店有訂單,則優(yōu)先級不減反加,每有一單優(yōu)先級加 2。
如果某家外賣店某時刻優(yōu)先級大于 5,則會被系統(tǒng)加入優(yōu)先緩存中;如果 優(yōu)先級小于等于 3,則會被清除出優(yōu)先緩存。
給定?T?時刻以內(nèi)的?M?條訂單信息,請你計算?T?時刻時有多少外賣店在優(yōu) 先緩存中?
輸入描述
第一行包含 3 個整數(shù)?N,M,T。
以下?M?行每行包含兩個整數(shù)?ts,id,表示?tsts?時刻編號?id?的外賣店收到一個訂單。
其中,N1≤N,M,T≤105,1≤ts≤T,1≤id≤N。
輸出描述
輸出一個整數(shù)代表答案。
輸入輸出樣例
示例
輸入
2 6 6 1 1 5 2 3 1 6 2 2 1 6 2輸出
1樣例解釋:
6 時刻時,1 號店優(yōu)先級降到 3,被移除出優(yōu)先緩存;2 號店優(yōu)先級升到 6, 加入優(yōu)先緩存。所以是有 1 家店 (2 號) 在優(yōu)先緩存中。
運(yùn)行限制
- 最大運(yùn)行時間:2s
- 最大運(yùn)行內(nèi)存: 256M
由于輸入的數(shù)據(jù)對是沒有順序的,我們可以對其進(jìn)行排序,對相同的數(shù)據(jù)進(jìn)行批量處理,以及用一個數(shù)組來記錄上一次有訂購的時間,這像是一種對時間離散化的處理:
#include <iostream> #include <bits/stdc++.h> using namespace std; #define x first #define y second #define MAX_N 100001 typedef pair<int,int> PII; PII orders[MAX_N]; bool store[MAX_N]; int score[MAX_N],last[MAX_N];int main() {// 請在此輸入您的代碼int N,M,T;cin>>N>>M>>T;for(int i=0;i<M;++i){scanf("%d%d",&orders[i].x,&orders[i].y);}sort(orders,orders+M);for(int i=0;i<M;){int j=i;while(j<M && orders[i]==orders[j]) ++j;int id=orders[i].y,t=orders[i].x,cnt=j-i;i=j;score[id] -= t-last[id]-1;score[id] = max(0,score[id]);if(score[id]<=3) store[id]=false;score[id]+=2*cnt;if(score[id]>5) store[id]=true;last[id]=t;}//處理最后的時間for(int i=1;i<=N;++i){score[i]-=T-last[i];if(score[i]<=3) store[i]=false;}int res=0;for(int i=1;i<=N;++i){if(store[i]) res++;}printf("%d",res);return 0; }總結(jié)
以上是生活随笔為你收集整理的蓝桥杯真题:外卖优先级的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决 | 此数据库文件跟当前sql se
- 下一篇: springCloud分布式事务实战(九