Untitled

 avatar
unknown
python
2 years ago
2.3 kB
5
Indexable
n, m = map(int, input().split(',', 2))  # 讀取n跟m

P = list(map(int, input().split(',', n)))  # 服務時間
R = list(map(int, input().split(',', n)))  # 預約時間
B = list(map(int, input().split(',', n)))  # 營收

order = [i for i in range(n)]  # 每個禮物的編號
# 氣泡排序法
for k in range(n):
    for i in range(n-k-1):
        # ---------判斷第i個和第i+1個的順序是否正確----------
        correct = False
        a, b = order[i], order[i+1]

        if P[a] != P[b]:  # 服務時間不同就用服務時間排序
            correct = P[a] < P[b]
        else:
            if R[a] != R[b]:  # 服務時間相同,預約時間不同就用預約時間排序
                correct = R[a] < R[b]
            else:  # 以上都相同則用編號排序
                correct = a < b
        # ----------------------------------
        if not correct:  # 如果順序不對就要交換
            order[i], order[i+1] = order[i+1], order[i]



isReserve = [[0 for _ in range(360)] for _ in range(m)] # 預約表,isReverse[j][t]=1代表按摩師j在時間t有預約,0則是沒有預約
Customer = 0  # 總共可服務幾個客人
Revenue = 0  # 總營收

for i in order:  # 依照剛排好的順序依序安排按摩師與服務的時間
    waitTime = 1e9  # 最短等待時間
    masseurID = -1  # 最短等待時間的按摩師

    for j in range(m):  # 遍歷每一個按摩師
        for t in range(R[i], R[i]+31):  # 客人只會等30分鐘
            if t+P[i] > 360:
                break
            if sum(isReserve[j][t:t+P[i]]) == 0:  # 檢查按摩師在時間t到t+P[i]是否有預約,=0代表都沒有預約
                if t-R[i] < waitTime:  # 如果這位按摩師能讓客人等更少的時間就安排給這位按摩師
                    waitTime = t-R[i]
                    masseurID = j
                    break

    if masseurID != -1:  # 有可用的按摩師
        StartServiceTime = R[i]+waitTime # 開始服務的時間是預約時間加上等待時間
        for t in range(StartServiceTime, StartServiceTime+P[i]): # 把該時段預約起來
            isReserve[masseurID][t] = 1

        Customer += 1 
        Revenue += B[i]
        

print(Customer, Revenue, sep=',')
Editor is loading...