Lưu ý đây là câu hỏi chủ yếu tập trung vào cấu trúc dữ liệu
Giới thiệu
Bacefook muốn mọi người thân thiện hơn! Vì vậy, họ đang thực hiện một hệ thống mới để đề xuất bạn bè! Nhiệm vụ của bạn là giúp Bacefook thực hiện hệ thống gợi ý mới của họ.
Thông số kỹ thuật:
Chương trình của bạn phải là một REPL (read-eval-in loop) hỗ trợ 3 loại lệnh: FRIEND
, SUGGEST
và KNOW
.
FRIEND X Y
- Chỉ định rằng X
và Y
là bạn bè trong mạng xã hội.
Nếu X là bạn với Y, thì Y là bạn với X
Có thể, nhưng không phải có đầu ra
X luôn là bạn với X
KNOW X Y
- Xuất ra một giá trị trung thực nếu X và Y là bạn bè, nếu không thì giả
KNOW X X
sẽ luôn tạo ra một giá trị trung thực
SUGGEST X Y
- Xuất ra một giá trị trung thực nếu X và Y nên là bạn bè, giả mạo nếu không. X và Y nên làm bạn nếu:
X và Y không phải là bạn
X và Y có ít nhất 1 người bạn chung
Bạn được phép để thay thế FRIEND
, SUGGEST
và KNOW
với chuỗi riêng của bạn, nhưng bạn phải đề cập đến những gì chuỗi bạn đã thay thế mỗi lệnh với.
Chương trình của bạn có thể nhận đầu vào / sản xuất đầu ra theo bất kỳ cách nào mong muốn, miễn là dễ dàng nhận ra cách thức hoạt động của nó.
Số người trong mạng xã hội N
là từ 1 đến 100.000, nhưng có thể có bất kỳ số lượng "liên kết bạn bè" nào (các cạnh).
Nếu bạn chưa nhận thấy, đây là một vấn đề tìm kiếm đồ thị. Cấu trúc dữ liệu (có thể) dễ nhất (và có thể nhanh nhất) để thực hiện điều này sẽ là một ma trận kề.
Các trường hợp thử nghiệm
FRIEND A B
FRIEND A C
FRIEND B D
SUGGEST A B -> Falsy, as they are friends
SUGGEST A D -> Truthy, as they share B as a common friend
SUGGEST C D -> Falsy, they do not share a common friend
KNOW D B -> Truthy, they are friends
KNOW B C -> Falsy, not friends
=============
FRIEND Tom Tim
KNOW Tom Tim -> Truthy
KNOW Tim Tom -> Truthy
KNOW Tom Kit -> Falsy
=============
KNOW Tim Kit -> Falsy
FRIEND Tim Tom
KNOW Tim Kit -> Falsy
FRIEND Tom Kit
SUGGEST Tim Kit -> Truthy
=============
FRIEND X Y
SUGGEST X Y -> Falsy since X is friends with X
Dưới đây là một số trường hợp thử nghiệm khác ở dạng hình ảnh
Điều kiện thắng
Đây là mã golf , mã thắng ngắn nhất!
SUGGEST UK EU
.
{A, B, C, D}
không?