Câu đố đầu tiên từ tôi, đề nghị cải thiện sẵn sàng nhận được!
Kịch bản là; Bạn làm quản lý cho một công ty đi bè nước trắng. Mỗi buổi sáng, bạn được cung cấp một danh sách các đặt phòng, và bạn phải sắp xếp chúng thành tải bè. Viết chương trình hoặc chức năng bằng ngôn ngữ bạn chọn thực hiện điều này cho bạn.
Mỗi bè chứa tối đa n
khách hàng và mỗi đặt phòng dành cho một nhóm từ 1 đến n
người (bao gồm). Các quy tắc sau đây phải được tuân thủ;
Không có nhóm có thể được tách ra. Nếu họ đặt cùng nhau, tất cả họ phải ở trong cùng một chiếc bè.
Số lượng bè phải được giảm thiểu.
Theo hai quy tắc đặt trước, các nhóm phải được trải đều như nhau giữa các bè.
Đầu vào.
Số n
(bạn có thể cho rằng đây là số nguyên dương) và kích thước của tất cả các đặt phòng. Đây có thể là một mảng, danh sách hoặc cấu trúc dữ liệu tương tự nếu ngôn ngữ của bạn hỗ trợ những thứ đó. Tất cả những thứ này sẽ là số nguyên dương giữa 1 và n
. Thứ tự của các đặt phòng không được xác định, cũng không quan trọng.
Đầu ra. Một danh sách các số đặt phòng, được nhóm thành tải bè. Việc nhóm phải được chỉ định rõ ràng, chẳng hạn như;
- một danh sách, hoặc mảng của mảng.
- một danh sách được phân tách bằng dấu phẩy cho mỗi bè. Dòng mới giữa mỗi bè.
Làm thế nào bạn thực hiện quy tắc thứ ba là tùy thuộc vào bạn, nhưng điều này có thể liên quan đến việc tìm ra tỷ lệ chiếm hữu trung bình và giảm thiểu độ lệch khỏi nó càng nhiều càng tốt. Dưới đây là một số trường hợp thử nghiệm.
n Bookings Output
6 [2,5] [5],[2]
4 [1,1,1,1,1] [1,1,1],[1,1]
6 [2,3,2] [2,2],[3]
6 [2,3,2,3] [2,3],[2,3]
6 [2,3,2,3,2] [2,2,2],[3,3]
12 [10,8,6,4,2] [10],[8,2],[6,4]
6 [4,4,4] [4],[4],[4]
12 [12,7,6,6] [12],[7],[6,6]
Áp dụng quy tắc chuẩn, mã ngắn nhất sẽ thắng. Chúc vui vẻ!
Đã chỉnh sửa; Một cách được đề xuất để xác định càng nhiều càng tốt cho quy tắc thứ ba.
Khi số lượng bè r
đã được xác định (theo quy tắc thứ hai), công suất trung bình a
có thể được tính bằng cách tính tổng các đặt chỗ và chia cho r
. Đối với mỗi bè, độ lệch so với công suất trung bình có thể được tìm thấy bằng cách sử dụng d(x) = abs(n(x)-a)
, trong đó n(x)
số người trong mỗi bè và 1 <= x <= r
. Đối với một số hàm liên tục, có giá trị duy nhất, có giá trị f(y)
dương hoàn toàn và có đạo hàm thứ hai dương và thứ nhất dương cho tất cả các số dương y
, chúng tôi xác định một đại lượng không âm F
, là tổng của tất cả f(d(x)), 1 <= x <= r
. Bất kỳ lựa chọn phân bổ bè nào thỏa mãn hai quy tắc đầu tiên và ở đâu F
bằng với mức tối thiểu toàn cầu cũng sẽ thỏa mãn quy tắc thứ ba.
g(y) = y
(dẫn xuất số 0) hoặc g(y) = y²
(lần đầu tiên thay đổi số 0 khi y = 0
).