close
Content
雲端列印服務公司提出一個新型服務。
該公司有 n 台 3D 印表機,
其中印表機 P1,P2, ..., Pk 用以優先服務最為重要客戶,
印表機 Pk+1, Pk+2, ..., Pn 列印速度較慢,用以優先服務一般客戶。
每個客戶依該年度所選擇服務等級及所繳交費用可有不同的列印優先權, 以 1, ..., 10000 表示之;
10000 代表最高列印優先權,1 代表最低列印優先權。
為了不讓低列印優先權的客戶永無止盡的等待,
印表機 P1, P2, ..., Pk 一旦有空,等待的工作中優先權最高的工作就會被交付列印;
而印表機 Pk+1, Pk+2, ..., Pn一旦有空, 等待的工作中優先權最低的工作就會被交付列印。
請寫一個程式列舉交付列印工作的順序。
Input
輸入只有一行,共有不定數量的整數,
整數可為{-2, -1, 0, 1, 2, ..., 10000},兩整數之間以一個空白隔開。
-2 表示印表機 P1, P2, ..., Pk其中一台有空, 可以列印最高優先權的工作;
-1 表示印表機 Pk+1, Pk+2, ..., Pn其中一台有空, 可以列印最低優先權的工作;1, 2, ..., 10000
代表新增一個優先權為該數字之工作;
0 則代表輸入結束。
若輸入為 -1 或 -2但無等待列印的工作,則不列印,需等待下一個 -1 或 -2 才再列印新的工作。
Output
請依被列印工作的順序,輸出該工作的優先權代號,之後緊接著一個空白。
尚未交付列印的工作不需輸出。
Sample Input #1
// Example 1 20 15 10 -2 -1 -1 0 // Example 2 1 2 3 -2 4 5 6 -1 7 0
Sample Output #1
// Example 1 20 10 15 // Example 2 3 1
import bisect while True: try: #arr=list(map(int,input().split())) arr=[int(x) for x in input().split()] jobs=[]#存放等待列印 cnt={}#放列印命令次數 opt=[]#存放要輸出的list for x in arr:#去檢查輸進來的數字 if(x==-1): if(len(jobs)==0):continue#如果jobs是空的,就沒事 #有數字的話 dv=jobs[0]#取出job的最小數 opt.append(dv)#將最小數取出,放進邀輸出的list裡面 cnt[dv]-=1#我的字典裡,這個數字出現的紀錄次數-1 #這邊目的是要讓我的pop次數減少,這樣時間又可以減少一點 if cnt[dv]==0:#若我的字典裡沒有這個數 jobs.pop(0)#將字典裡的這個數刪掉 cnt.pop(dv)#也將紀錄"放列印命令次數"list裡面的數字刪調 elif(x==-2): pass if(len(jobs)==0):continue dv=jobs[-1]#取出job的最大數 opt.append(dv)#將最大數取出,放進邀輸出的list裡面 cnt[dv]-=1#我的字典裡,這個數字出現的紀錄次數-1 #這邊目的是要讓我的pop次數減少,這樣時間又可以減少一點 if cnt[dv]==0:#若我的字典裡沒有這個數 jobs.pop(-1)#將字典裡的這個數刪掉 cnt.pop(dv)#將紀錄"放列印命令次數"list裡面的數字刪調 else: #先檢查我的字典裡有沒有這個數字出現的紀錄 if x in cnt.keys():#若有,將次數+1 cnt[x]+=1 else: cnt[x]=1#若無,做紀錄 bisect.insort(jobs,x) #bisect.insort(陣列.元素) print(*opt,sep=" ") except: break
文章標籤
全站熱搜
留言列表