Lý lịch
Giả sử rằng có những 2*n
người kết hôn và giả sử rằng mỗi người bị thu hút bởi chính xác n
những người khác dưới những ràng buộc rằng:
- Thu hút là đối xứng ; tức là nếu người đó
A
bị thu hút bởi người đóB
, thì người đóB
bị thu hút bởi người đóA
. - Thu hút là chống độc quyền ; tức là nếu người
A
và ngườiB
mỗi người bị thu hút bởi ngườiC
, thì ngườiA
và ngườiB
không bị thu hút lẫn nhau.
Do đó, mạng lưới các điểm tham quan tạo thành biểu đồ lưỡng cực hoàn chỉnh (không bị ngăn chặn) Kn,n
. Chúng tôi cũng cho rằng mỗi người đã xếp hạng những người mà họ bị thu hút. Đây có thể được biểu diễn dưới dạng trọng số cạnh trong biểu đồ.
Một cuộc hôn nhân là một cặp đôi (A,B)
ở đâu A
và B
đang thu hút lẫn nhau. Cuộc hôn nhân không ổn định nếu có một cuộc hôn nhân khác mà một người trong mỗi cuộc hôn nhân có thể ly dị bạn đời và kết hôn với nhau và cả hai kết thúc với một người mà họ xếp hạng cao hơn so với người bạn đời cũ.
Mục tiêu
Nhiệm vụ của bạn là viết một chương trình hoặc chức năng hoàn chỉnh, lấy sở thích của mỗi người làm đầu vào và đưa ra một cuộc hôn nhân cho mỗi người để mỗi cuộc hôn nhân ổn định.
Đầu vào
Đầu vào có thể ở bất kỳ định dạng thuận tiện; ví dụ: biểu đồ có trọng số, danh sách ưu tiên theo thứ tự, từ điển / giả định, v.v. Bạn có thể tùy ý lấy tổng số người làm đầu vào, nhưng không cho phép đầu vào nào khác.
Đầu ra
Đầu ra cũng có thể ở bất kỳ định dạng thuận tiện; ví dụ: danh sách các bộ dữ liệu, bìa cạnh tối thiểu , chức năng liên kết với mỗi người bạn đời của họ, v.v ... Lưu ý rằng hạn chế duy nhất là mỗi cuộc hôn nhân ổn định, không có yêu cầu tối ưu nào khác.
Ghi chú
- Bạn có thể tìm thêm thông tin và
O(n^2)
thuật toán để giải quyết vấn đề này trên Wikipedia hoặc video Numberphile này . Bạn có thể tự do sử dụng bất kỳ thuật toán, tuy nhiên. - Sơ hở tiêu chuẩn bị cấm.
- Đây là môn đánh gôn . Câu trả lời ngắn nhất (tính bằng byte) thắng.