歡迎點擊「算法與編程之美」↑關注我們!
本文首發於微信公衆號:"算法與編程之美",歡迎關注,及時瞭解更多此係列文章。
歡迎加入團隊圈子!與作者面對面!直接點擊!
問題描述
外賣系統中維護着N家外賣店,編號1~N。每家外賣店都有一個優先級,初始時(0時刻)優先級都爲0。
每經過1個時間單位,如果外賣唐沒有訂單,則優先級會減少1,最低減到0;而如果外賣店有訂單,則優先級不減反加,每有一單優先級加2。
如果某家外賣店某時刻優先級大於5,則會被系統加入優先緩存中;如果優先級小於等於3,則會被清除出優先緩存。
給定T時刻以內的M條訂單信息,請你計算T時刻時有多少外賣店在優先緩存中。
【輸入格式】
第一行包含3個整數N、M和T。
以下M行每行包含兩個整數t和id,表示ts時刻編號id的外賣唐收到一個訂單
【輸出格式】
輸出一個整數代表答案。
【樣例輸入】
2 6 6
1 1
5 2
3 1
6 2
2 1
6 2
【樣例輸出】
1
【樣例解釋】
6時刻時,1號店優先級降到3,被移除出優先緩存;2號唐優先級升到6加入優先緩存。所以是有1家店(2號)在優先緩存中。
解決方案
這道題是根據輸入的數據依次判斷時間點是否有訂單來進行優先級的加減。那麼直接根據輸入的數據建立一個初始值爲0的列表,再按照輸入數據隨着時間進行判斷。
這裏可以創立一個新的列表,利用字典對輸入的值進行填充,再遍歷新創立的列表,有就+2,沒有就-1。
最後便是對加入或者刪除優先級緩存的判斷。對緩存的判斷要以3爲標準。這樣纔可以對已加入緩存的店鋪進行加減。最後遍歷刪除<=3就行。
代碼示例:
N, M, T = map(int, input().split()) lis = [0 for i in range(N)] #創建一個基礎優先級爲0的列表 lis_a, lis_b = [], [] dic = {} for i in range(M): a, b = map(int, input().split()) lis_a.append(a) lis_b.append(b) for i in range(1, T+1): #按時間點進行判斷 lis1 = [] #每次遍歷的時間點若有訂單就加入 for j in range(M): if lis_a[j] == i: lis1.append(lis_b[j]) for k in lis1: #在列表中,即有訂單,+2 lis[k-1] += 2 for p in range(1, N+1): #不在列表,-1 if p not in lis1 and lis[p-1] > 0: #最低到0 lis[p-1] -= 1 for q in range(N): if lis[q] >= 3: #當優先級>3便加入或者更改 dic[q+1] = lis[q] for k in list(dic): #優先級<=3,便刪除 if int(dic[k]) <= 3: dic.pop(k) print(len(dic)) |
END
實習編輯 | 王文星
責 編 | 周茂林
where2go 團隊
微信號:算法與編程之美
長按識別二維碼關注我們!
溫馨提示:點擊頁面右下角“寫留言”發表評論,期待您的參與!期待您的轉發!