可以幫幫我迴圈的部分嗎 拜託了
目前寫到這裡
n_m = input().split(",")
service_time = input().split(",")
appointment = input().split(",")
money = input().split(",")
for i in range(len(b)):
service_time[i] = int(service_time[i])
appointment[i] = int(appointment[i])
money[i] = int(money[i])
n = int(n_m[0])
m = int(n_m[1])
ll = []
for i in range(len(b)):
a = []
a.append(service_time[i])
a.append(appointment[i])
a.append(i + 1)
ll.append(a)
ll.sort()
小智和大比鳥(又譯比鵰)分別後回到故鄉,開了一家按摩店當老闆,每天營業時間為晚上
6:00 到午夜 12:00。小智每天都要把當晚有預約的 n 個客人分給 m 個按摩師。客人編號為 1、2 到 n,按摩師編號則為 1、2 到 m,已知 m ≤ n。每個客人會預約不同的項目,而客人 j 預約的服務需要花 pj分鐘才能完成,一旦完成服務後則小智可以獲得 bj 元的營收。客人們都知道小智按摩店有多熱門,因此預約時不會指定時間或按摩師,完全交由小智安排。即使如此,由於一位按摩師在一個時刻只能服務一位客人,且按摩師人數 m 有限,並且按摩師工時不得超過六小時,即每位按摩師最後一位客人服務結束的時間不得超過 12 點,因此小智可能會必須通知一些客人取消訂位。客人 j 預約時會指定開始時間 rj ,rj = 0 表示晚上 6:00、rj = 1 表示晚上 6:01,依此類推。小智不能讓客人等待超過 30 分鐘(30 分鐘可以,31 分鐘不行);如果讓客人等待超過 30 分鐘,他就會暴怒,因此小智得事前通知他取消訂位。
小智希望能安排工作並最大化每晚的總營業收益,而他使用如下的演算法1。
你或許覺得這演算法充滿漏洞,不過本課程不是教最佳化演算法,請就給定的演算法做實做即可。
給定所有預約記錄,請使用上面的演算法做安排,並計算一共有幾位客人被服務,以及小智當晚總共能
獲得多少營收。
舉例來說,假設有 5 個客人、3 個按摩師,服務時間依序是 70、50、50、60 與 60 分鐘、預約時間依序是 6:00、6:10、6:00、6:10 與 6:30,而營收依序是 300、300、300、500、500 元,則根據服務時間得到的排序將是 2 與 3 優先,4 與 5 次之,1 最後,再考慮預約時間後將讓 3 優先於 2,以及 4 優先於5,因此最後的排序將是 3、2、4、5、1。進入安排階段,首先我們會把客人 3、2、4 安排給按摩師 1、2、3。接著客人 5 會被安排給按摩師 1(要請他等 20 分鐘,在 6:50 開始被服務),而客人 1 則因為無論安排給哪位按摩師,都要等超過 30 分鐘,因此今晚沒辦法服務他。小智能收取的總營收是後面四位
付出的共 1600 元。
系統會提供數組測試資料,每組測試資料裝在一個檔案裡。在每個檔案中,第一行會有兩個正整
數,分別為客人人數 n 與按摩師人數 m,第二行會有 n 個正整數,分別為各顧客的服務時間 p1、p2直到 pn,第三行會有 n 個正整數,分別為各顧客的預約時間 r1、r2 直到 rn,第四行會有 n 個正整數,分別為各顧客的服務營收 b1、b2 直到 bn,任兩個數字之間用一個逗點隔開。已知 1 ≤ n ≤ 500、1 ≤ m ≤ 20、1 ≤ pj ≤ 180、0 ≤ rj ≤ 300、1 ≤ bj ≤ 1000。
讀入這些資訊後,請依照題目指定的規則,計算並依序印出兩個整數,分別是共幾個客人被服務,以及總營收。兩個數字之間用一個逗點隔開。
舉例來說,如果輸入是:
5,3
70 ,50 ,50 ,60 ,60
0 ,10 ,0 ,10 ,30
300 ,300 ,300 ,500 ,500
則輸出應該是:
4 ,1600
如果輸入是:
5,3
125 ,135 ,105 ,95 ,35
125 ,70 ,235 ,150 ,130
250 ,880 ,210 ,910 ,670
則輸出應該是:
4 ,2040
在 main function 中,首先讀入輸入的數據,然後按照規則排序客人列表。接下來,初始化按摩師列表和按摩師結束時間列表,然後按照順序排定每一個客人。對於每一個客人,程序會尋找能讓客人等最短時間的按摩師,如果找到符合條件的按摩師,就排定這位客人的按摩師和開始時間,更新按摩師列表和按摩師結束時間列表,並增加收益;否則,就放棄這位客人。最後,程序輸出總收益。
def main():
# 讀入輸入
n, m = map(int, input().split())
customers = []
for i in range(n):
p, b, r = map(int, input().split())
customers.append((i + 1, p, b, r))
# 按照規則排序
customers = sorted(customers, key=lambda x: (x[1], x[3], x[0]))
# 初始化按摩師列表
massage_therapists = [[] for _ in range(m)]
massage_therapists_end_times = [0] * m
# 按照順序排定每一個客人
revenue = 0
for customer in customers:
idx, p, b, r = customer
# 尋找能讓客人等最短時間的按摩師
selected_massage_therapist = None
selected_start_time = None
for i in range(m):
if massage_therapists_end_times[i] <= r:
start_time = max(massage_therapists_end_times[i], r)
if selected_massage_therapist is None or start_time - r < selected_start_time - r:
selected_massage_therapist = i
selected_start_time = start_time
# 如果有符合條件的按摩師
if selected_massage_therapist is not None and selected_start_time - r <= 30:
massage_therapists[selected_massage_therapist].append(idx)
massage_therapists_end_times[selected_massage_therapist] = selected_start_time + p
revenue += b
# 如果找不到符合條件的按摩師,就放棄這位客人
else:
pass
# 輸出總收益
print(revenue)
if __name__ == '__main__':
main()
n, m = map(int, input().split(",")) # 客人數 & 按摩師數 5, 3
pj = list(enumerate(map(int, input().split(",")))) # 服務時間 70, 50, 50, 60, 60
rj = list(map(int, input().split(","))) # 預約時間 0, 10, 0, 10, 30
revenue = list(map(int, input().split(","))) # 營收 300, 300, 300, 500, 500
m_tmp = [[i, 0] for i in range(m)]
revenues = 0
pj.sort(key=lambda x: x[1])
last = 0
for i, v in pj:
if v == last: # 服務時間 相同
now_rj, last_rj = rj[i], rj[i - 1]
if now_rj < last_rj: # 按造預約時間
tmp = pj[i]
pj[i] = pj[i - 1]
pj[i - 1] = tmp
last = v
# 這邊有點問題 0.0 (還在想要怎默寫比較好)
for i, v in pj: # 安排階段
t = m_tmp[i % m]
if (da := t[1] - rj[i]) <= 30:
t[1] = da + v
revenues += revenue[i]
else:
n -= 1 # 放棄,減去一個
print(f"{n},{revenues}")
"""
5,3
70 ,50 ,50 ,60 ,60
0 ,10 ,0 ,10 ,30
300 ,300 ,300 ,500 ,500
---
4 ,1600
"""
"""
5,3
125 ,135 ,105 ,95 ,35
125 ,70 ,235 ,150 ,130
250 ,880 ,210 ,910 ,670
---
4 ,2040
"""
先這樣,有一些部分有問題所以答案有誤(家人在叫吃飯先打到這,如果等等有空再看看