Abridged Problem Statement
มีคนสองคนและตารางขนาด โดยแต่ละช่องของตารางจะมีเหรียญอยู่ช่องละ 1 เหรียญ และแต่ละเหรียญจะมีชื่อตั้งแต่ ถึง โดยเรียงตามลำดับจากซ้ายไปขวา และจากบนลงล่าง
โดยในตอนแรกแต่ละเหรียญจะเป็นหัวหรือก้อยตาม std::vector<int> b
ที่ได้รับมา
มี 1 คนที่รู้ว่าเเหรียญที่ต้องการหาคือเหรียญ แต่ทว่าในการหาเหรียญ นั้นคนที่จะตอบ(อีกคนหนึ่ง)ก็จะไม่รู้ว่าเหรียญ คือเหรียญหมายเลขใด
งานของคุณ ช่วยคิดวิธีทำให้คนที่ไม่รู้ว่าเหรียญ สามารถรู้ได้ว่าเหรียญ คือเหรียญใดโดยคนที่รู้ว่าเหรียญ คือเหรียนไหนพลิกเหรียญได้ไม่เกิน ครั้ง
ปัญหาย่อย
ในกรณีนี้สามารถแก้ได้โดย
- ถ้า ให้พลิกเหรียญหมายเลข เป็น ได้โดยพลิกไม่เกิน ครั้ง
- ถ้า ให้พลิกเหรียญหมายเลข เป็น ได้โดยพลิกไม่เกิน ครั้ง
ปัญหาย่อย
พลิกเหรียญทั้งหมดที่ไม่ใช่ ให้เป็น และทำให้เหรียญ เป็น ทำได้ในการพลิกไม่เกิน ครั้ง
ปัญหาย่อย
แปลงตารางช่อง ให้เป็นเลขฐานสอง ของ ทำทำได้ในการพลิกไม่เกิน ครั้ง
ปัญหาเต็ม
นำหมายเลขของเหรียญที่พลิกเป็นหน้า มา (Binary XOR) กันได้ แล้วพลิกเหรียญหมายเลข ทำให้พลิกเพียง ครั้งเท่านั้น
เมื่ออีกคนมาหาหมายเลข ก็สามารถนำหมายเลขของเหรียญที่มีค่าเป็น มา กันเพื่อหาเหรียญ ได้เลย
โดยการทำวิธีการนี้อาศัยสมบัติของ คือ