Dũng Văn Đỗ

Để phòng ngừa bệnh dịch người ta quyết định phân phát thuốc xuống các trạm y tế để cung cấp miễn phí cho tất cả mọi người trong địa bàn. Có N trạm y tế, được đánh từ 1 đến N. Mỗi trạm dự kiến được cấp cùng một số lượng như nhau các hòm thuốc. Tất cả thuốc đã được chở về đủ tới một số trạm địa phương và đang được phân phối xuống từng trạm. Hiện tại trạm I đã nhận được P1 hòm thuốc (p1 >=0, I=1, 2, ..., N). Bệnh dịch có khả năng lây nhiễm cao. Trong vùng phát hiện mầm bệnh Bộ Y tế quyết định hạn chế mọi việc di chuyển, đi lại. Trạm I chỉ nhận hoặc chuyển thuốc với 2 trạm lân cận i-1 và i+1 (1<i<N), trạm 1 chỉ giao tiếp với trạm 2 và trạm N chỉ giao tiếp với trạm N-1. Do hạn chế về phương tiện vận chuyển nên mỗi giờ mỗi trạm chỉ có thể chuyển sang mỗi trạm lân cận một hòm thuốc. Hãy xác định sớm nhất sau bao nhiêu giờ mỗi trạm sẽ nhận đủ số hòm thuốc như kế hoạch ban đầu.

 

Phía sau một cô gái
29 tháng 6 2023 lúc 8:51

N = int(input("Nhập số trạm y tế: "))

P = [int(p) for p in input("Nhập số hòm thuốc đã nhận cho mỗi trạm, cách nhau bởi dấu cách: ").split()]

# Tính số hòm thuốc cần phân phát cho mỗi trạm

total = sum(P)

each = total // N

remain = total % N

# Tính số giờ cần để phân phát hòm thuốc đầy đủ cho mỗi trạm

times = [0] * N

for i in range(N):

      # Tính số hòm thuốc cần chuyển đến trạm lân cận

      need = each

      if i == 0 or i == N-1:

            need += remain

      # Tính số giờ cần để chuyển đủ hòm thuốc cần thiết

      if P[i] >= need:

            times[i] = 0

      else:

            hours = 0

            left = need - P[i]

            if i > 0:

                  # Chuyển hòm thuốc sang trạm trước đó

                  prev = min(left, each)

                  left -= prev

                  hours += prev

            if left > 0:

                  # Chuyển hòm thuốc sang trạm sau đó

                  if i < N-1:

                        next = min(left, each)

                        left -= next

                        hours += next

            if left > 0:

                  # Chuyển hòm thuốc sang trạm trước đó nữa trong trường hợp trạm hiện tại là trạm cuối cùng

                  prev = min(left, each)

                  left -= prev

                  hours += prev

            times[i] = hours

# In kết quả

for i in range(N):

      print("Trạm", i+1, "nhận đủ số hòm thuốc sau", times[i], "giờ.")


Các câu hỏi tương tự
Trương Văn Tài
Xem chi tiết
TBNT
Xem chi tiết
Huyền Diệu Nguyễn
Xem chi tiết
Hoài thịnh
Xem chi tiết
Kiệt Bùi
Xem chi tiết
Givemesome Flan
Xem chi tiết
Hoài thịnh
Xem chi tiết
Vien Nguyen
Xem chi tiết
Thủy Nguyễn
Xem chi tiết