Năm Covid thứ nhất, hai thành phố Hà Nội và HCM tổ chức các trại cách ly đón công dân hồi hương từ các vùng dịch.
Có � trại của Hà Nội được đánh số 1,2,…,� và � trại của TP. HCM được đánh số 1,2,…,�. Để đơn giản có thể xem vị trí các trại như là các điểm trên mặt phẳng tọa độ hai chiều (không nhất thiết phải phân biệt - quá kỳ diệu!!!)
Để giám sát, Trưởng Ban chỉ đạo quốc gia xuất phát từ trại 1 của Hà Nội và lần lượt thăm �+� trại của cả hai thành phố và kết thúc ở trại � của Hà Nội sao cho nếu theo danh sách này thì các trại của Hà Nội được thăm theo trình tự 1,2,…,� và các trại của TP HCM được thăm theo trình tự 1,2,…�.
Khi di chuyển từ trại này sang trại khác với khoảng cách � thì đồng chí Trưởng ban tốn �2 đồng.
Hãy viết chương trình giúp Đảng và Nhà nước tính tổng chi phí tối thiểu nếu đồng chí trưởng ban chỉ đạo thăm đủ �+� trại của hai thành phố theo trình tự thỏa mãn yêu cầu nêu trên.
Input
Dòng 1: Chứa hai số nguyên dương �,�≤1000
� dòng tiếp theo, dòng thứ � ghi tọa độ trại thứ � của thành phố Hà Nội (�=1,2,..,�).
� dòng tiếp theo, dòng thứ � ghi tọa độ trại thứ � của thành phố Hồ Chí Minh (�=1,2,..,�).
Tất cả các tọa độ đều là các số nguyên có giá trị trong khoảng 0...1000
Output
Một dòng ghi một giá trị là tổng năng lượng tiêu hao tối thiểu tìm được (dễ thấy con số này luôn là số nguyên !!!).
Example
Test 1
Input
Copy
Copy
3 2
0 0
1 0
2 0
0 3
1 3
Output
Copy
Copy
20
Yêu cầu làm rõ đề
Thông báo
Không có thông báo nào.
proudly powered by DMOJ | developed by LQDJudge team | Tiếng Việt (vi)
English (en)
Quảng cáo
1 câu trả lời 188
Dưới đây là một chương trình Python để giải quyết bài toán này:
```python
from queue import Queue
def calculate_min_cost(n, m, hanoi_coords, hcm_coords):
# Tạo ma trận lưu khoảng cách giữa các trại
distances = [[0] * (n+m) for _ in range(n+m)]
# Tính khoảng cách giữa các trại của Hà Nội for i in range(n): for j in range(i+1, n): d = abs(hanoi_coords[i][0] - hanoi_coords[j][0]) + abs(hanoi_coords[i][1] - hanoi_coords[j][1]) distances[i][j] = d distances[j][i] = d # Tính khoảng cách giữa các trại của TP.HCM for i in range(m): for j in range(i+1, m): d = abs(hcm_coords[i][0] - hcm_coords[j][0]) + abs(hcm_coords[i][1] - hcm_coords[j][1]) distances[n+i][n+j] = d distances[n+j][n+i] = d # Tìm đường đi ngắn nhất từ trại 1 của Hà Nội đến tất cả các trại q = Queue() visited = [False] * (n+m) visited[0] = True q.put(0) while not q.empty(): u = q.get() for v in range(n+m): if not visited[v]: visited[v] = True q.put(v) # Tính tổng chi phí tối thiểu min_cost = 0 for i in range(n+m): for j in range(i+1, n+m): if visited[i] and visited[j]: min_cost += distances[i][j] ** 2 return min_cost
Đọc input
n, m = map(int, input().split())
hanoi_coords = []
for _ in range(n):
x, y = map(int, input().split())
hanoi_coords.append((x, y))
hcm_coords = []
for _ in range(m):
x, y = map(int, input().split())
hcm_coords.append((x, y))
Tính tổng chi phí tối thiểu
min_cost = calculate_min_cost(n, m, hanoi_coords, hcm_coords)
In kết quả
print(min_cost)
```
Độ phức tạp của thuật toán này là O((n+m)^2), trong đó n là số trại của Hà Nội và m là số trại của TP.HCM
Quảng cáo
Bạn cần hỏi gì?
Câu hỏi hot cùng chủ đề
-
Hỏi từ APP VIETJACK
Đã trả lời bởi chuyên gia
45332 -
Hỏi từ APP VIETJACK
Đã trả lời bởi chuyên gia
34756 -
Đã trả lời bởi chuyên gia
30550 -
Hỏi từ APP VIETJACK28028
-
Hỏi từ APP VIETJACK
Đã trả lời bởi chuyên gia
22305
