หมายเหตุนี่เป็นคำถามที่เน้นไปที่โครงสร้างข้อมูลเป็นหลัก
บทนำ
Bacefook ต้องการให้ผู้คนเป็นมิตร! ดังนั้นพวกเขาจึงใช้ระบบใหม่เพื่อแนะนำเพื่อน! งานของคุณคือช่วย Bacefook ในการใช้ระบบแนะนำใหม่ของพวกเขา
ข้อมูลจำเพาะ:
โปรแกรมของคุณจะต้องเป็น REPL (ห่วงอ่าน EVAL-พิมพ์) สนับสนุน 3 ประเภทของคำสั่งFRIEND
, และSUGGEST
KNOW
FRIEND X Y
- ระบุว่าX
และY
เป็นเพื่อนในเครือข่ายสังคมออนไลน์
ถ้า X เป็นเพื่อนกับ Y ดังนั้น Y คือเพื่อนกับ X
ทำได้ แต่ไม่จำเป็นต้องมีเอาต์พุต
X เป็นเพื่อนกับ X เสมอ
KNOW X Y
- เอาท์พุทค่าความจริงถ้า X และ Y เป็นเพื่อนเท็จไม่อย่างนั้น
KNOW X X
จะส่งออกค่าความจริงเสมอ
SUGGEST X Y
- เอาท์พุทค่าความจริงถ้า X และ Y ควรเป็นเพื่อนไม่เช่นนั้นจะเป็นเท็จ X และ Y ควรเป็นเพื่อนถ้า:
X และ Y ไม่ใช่เพื่อน
X และ Y มีเพื่อนร่วมกันอย่างน้อย 1 คน
คุณได้รับอนุญาตเพื่อแทนที่FRIEND
, SUGGEST
และKNOW
กับสตริงของคุณเอง แต่คุณจะต้องพูดถึงสิ่งที่คุณได้สตริงแทนที่แต่ละคำสั่งด้วย
โปรแกรมของคุณสามารถรับอินพุต / สร้างเอาต์พุตได้ตามที่ต้องการตราบใดที่ง่ายต่อการจดจำว่ามันทำงานอย่างไร
จำนวนคนในเครือข่ายโซเชียลN
อยู่ระหว่าง 1 ถึง 100,000 แต่อาจมี "ลิงก์เพื่อน" (ขอบ) จำนวนเท่าใดก็ได้
หากคุณยังไม่ได้สังเกตนี่เป็นปัญหาการค้นหากราฟ โครงสร้างข้อมูล (น่าจะ) ที่ง่ายที่สุด (และอาจเร็วที่สุด) ที่จะใช้สิ่งนี้ในนั้นจะเป็นเมทริกซ์ adjacency
กรณีทดสอบ
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
นี่คือตัวอย่างทดสอบเพิ่มเติมในรูปแบบของภาพ
เงื่อนไขการชนะ
นี่คือรหัส - กอล์ฟรหัสที่สั้นที่สุดชนะ!
SUGGEST UK EU
.
{A, B, C, D}
ไหม?