ตามที่ชื่ออาจแนะนำปัญหานี้ได้รับแรงบันดาลใจมาจากบอท Polite Near- Sighted Drunkโดย @NP
บอทที่น่าสงสารของเรานั้นถูกวางไว้บนตะแกรงคาร์ทีเซียนที่จุดกำเนิดและหลังจากนั้นทุกนาทีมันจะเคลื่อนที่ 1 ยูนิตในหนึ่งในสี่ทิศทาง (ขึ้น, ลง, ซ้าย, ขวา)
หลังจากnนาทีเหมืองที่ซ่อนอยู่ทั้งหมดในกริดจะเปิดใช้งานเพื่อฆ่าบอทที่น่าสงสารที่อาจพบตัวเองอยู่เหนือพวกมัน เหมืองจะอยู่ที่พิกัดจำนวนเต็มทั้งหมดซึ่งเป็นไปตามสมการ | y | = | x |
ท้าทาย
คุณจะได้รับnจำนวนนาทีก่อนที่เหมืองระเบิดเป็น input และเอาท์พุทคุณจะต้องพบกับความน่าจะเป็นที่บอทเป็นตาย
การป้อนข้อมูล : มีจำนวนธรรมชาติที่เป็นตัวแทนของn
เอาต์พุต : ให้ความน่าจะเป็นที่บอทนั้นตายแล้วคือp / q, โดยที่ p และ q เป็นจำนวนเต็มจำนวนเต็ม (q ไม่สามารถเป็น 0, แต่ p สามารถ) p.
กฎระเบียบ
- อัลกอริทึมของคุณจะต้องไม่ทำงานในแบบเอ็กซ์โพเนนเชียล มันควรจะทำงานในเวลาพหุนามหรือน้อยกว่า
- อัลกอริทึมของคุณจะต้องสามารถจัดการอินพุตของ
n
<20 (สามารถปรับได้ถ้ายากเกินไป) ในเวลาที่เหมาะสม - นี่คือความท้าทายรหัส - กอล์ฟ
- การวนซ้ำความเป็นไปได้ทั้งหมดสำหรับn ที่ระบุจะไม่ได้รับการยอมรับว่าเป็นคำตอบแน่นอนที่สุด
กรณีทดสอบ
1
->0
2
->3
4
->39
6
->135
8
->7735
10
->28287
ตัวอย่างการคำนวณสำหรับn = 6
เรามีการเคลื่อนไหวที่เป็นไปได้ 4 อย่าง: U, D, R และ L จำนวนเส้นทางทั้งหมดที่สามารถดำเนินการได้คือ 4 ^ 6, หรือ 4096 มีกรณีที่เป็นไปได้ 4 กรณีที่อาจเกิดขึ้นตามแนว y = x: x, y = ± 1; x, y = ± 2; x, y = ± 3; หรือ x = y = 0 เราจะนับจำนวนวิธีที่จะสิ้นสุดที่ (1,1), (2,2), และ (3,3), คูณพวกมันด้วย 4 เพื่อคิดหาจตุภาคอื่น ๆ และเพิ่ม นี่คือจำนวนวิธีที่จะสิ้นสุดที่ (0,0)
กรณีที่ 1:บ็อตสิ้นสุดที่ (3, 3) เพื่อให้บอทสิ้นสุดที่นี่มันต้องมีการเคลื่อนไหวที่ถูกต้อง 3 ครั้งและการเคลื่อนไหว 3 ครั้ง กล่าวอีกนัยหนึ่งจำนวนทั้งหมดของวิธีที่จะได้รับที่นี่คือวิธีการจัดเรียงตัวอักษรใหม่ในลำดับ RRRUUU ซึ่งคือ 6 เลือก 3 = 20
กรณีที่ 2:บ็อตสิ้นสุดที่ (2,2) เพื่อให้บอทสิ้นสุดที่นี่มันอาจจะมีการเคลื่อนไหว 2 ครั้งการเคลื่อนไหวที่ถูกต้อง 3 ครั้งและการเคลื่อนไหวทางซ้าย 1 ครั้ง หรือ 2 การเคลื่อนไหวที่ถูกต้อง 3 การเคลื่อนไหวขึ้นและการเลื่อนลง 1 ครั้ง ดังนั้นจำนวนวิธีที่จะได้รับที่นี่คือผลรวมของวิธีการจัดเรียงตัวอักษรใหม่ในลำดับ RRRLUU และ UUUDRR ซึ่งทั้งคู่มี (6 เลือก 1) * (5 เลือก 2) = 60 สำหรับความเป็นไปได้ทั้งหมด 120 รายการ .
กรณีที่ 3:บ็อตสิ้นสุดที่ (1,1) เพื่อให้บอทสิ้นสุดที่นี่มันอาจจะมี: 1 การเคลื่อนไหวที่ถูกต้อง 3 การเคลื่อนไหวขึ้นและการเคลื่อนไหวลง 2 ครั้ง ในกรณีนี้จำนวนวิธีในการจัดเรียงตัวอักษรใหม่ตามลำดับ RUUUDD คือ (6 เลือก 1) * (5 เลือก 2) = 60
1 up move, 3 right right และ 2 left left ในกรณีนี้จำนวนวิธีการจัดเรียงตัวอักษรใหม่ในลำดับ URRRLL คือ (6 เลือก 1) * (5 เลือก 2) = 60
2 การเคลื่อนไหวขวา, 1 การเคลื่อนไหวซ้าย, 2 การเคลื่อนไหวขึ้นและ 1 การเคลื่อนไหวลง ในกรณีนี้จำนวนวิธีการจัดเรียงตัวอักษรใหม่ในลำดับ UUDRRL คือ (6 เลือก 1) * (5 เลือก 1) * (4 เลือก 2) = 180
ดังนั้นจำนวนทั้งหมดของวิธีที่จะสิ้นสุดที่ (1,1) คือ 300
กรณีที่ 4:บ็อตสิ้นสุดที่ (0,0) เพื่อให้บอทสิ้นสุดที่นี่มันอาจจะมี:
3 การเคลื่อนไหวที่ถูกต้องและ 3 การเคลื่อนไหวทางซ้าย ในกรณีนี้จำนวนวิธีการจัดเรียงตัวอักษรใหม่ในลำดับ RRRLLL คือ (6 เลือก 3) = 20
3 ขึ้นไปย้ายและ 3 ลงไป ในกรณีนี้จำนวนวิธีในการจัดเรียงตัวอักษรใหม่ตามลำดับ UUUDDD คือ (6 เลือก 3) = 20
1 ย้ายไปทางขวา 1 ย้ายไปทางซ้าย 1, ย้ายขึ้น 2 และ 2 ลงย้าย ในกรณีนี้จำนวนวิธีในการจัดเรียงตัวอักษรใหม่ตามลำดับ RLUUDD คือ (6 เลือก 1) * (5 เลือก 1) * (4 เลือก 2) = 180
1 up move, 1 down move, 2 right right, และ 2 left left ในกรณีนี้จำนวนวิธีในการจัดเรียงตัวอักษรใหม่ในลำดับ RRLLUD คือ (6 เลือก 1) * (5 เลือก 1) * (4 เลือก 2) = 180
ดังนั้นจำนวนทั้งหมดของวิธีที่จะสิ้นสุดที่ (0,0) คือ 400
การเพิ่มกรณีเหล่านี้เข้าด้วยกันเราจะได้รับจำนวนทั้งหมดของวิธีการที่จะสิ้นสุดใน | y | = | x | คือ 4 (20 + 120 + 300) + 400 = 2160 ดังนั้นความน่าจะเป็นของเราคือ 2160/4096 เมื่อส่วนนี้จะลดลงอย่างเต็มที่ก็คือ 135/256 ดังนั้นคำตอบของเราคือ135