日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

蓝桥杯真题:外卖优先级

發(fā)布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯真题:外卖优先级 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目描述

"飽了么"外賣系統(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。