บอทเมาใกล้สายตาที่อ่อนไหวบนทุ่นระเบิด


11

ตามที่ชื่ออาจแนะนำปัญหานี้ได้รับแรงบันดาลใจมาจากบอท 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


ฉันชอบความท้าทาย แต่ฉันคิดว่ามันจะได้ประโยชน์จากการรวมตัวอย่างการทำงานสำหรับหนึ่งในกรณีทดสอบขนาดเล็กมาก (2 หรือ 3) เช่น
Mr. Xcoder

@ Mr.Xcoder ฉันจะเพิ่มหนึ่งเมื่อฉันมีเวลา
Don Thousand

2
ความท้าทายที่น่าสนใจ โปรดทราบว่าการใช้คำว่า "ดีเลิศ" ในกฎทำให้ไม่ใช่กฎ มันจะมีประโยชน์ที่จะพูดอย่างเดียวไม่ทางใดก็ทางหนึ่ง
trichoplax

1
แต่ไม่มีใครพูดถึงอัลกอริธึมการเรียนรู้ครั้งแรกของเจน?
Redwolf

1
@ RedwolfPrograms ahaha ใช่ แต่บอทนี้มีชื่อที่เย็นกว่า
Don Thousand

คำตอบ:


17

Python 2 , 65 ไบต์

def p(n):b=2**n;r=b*b-((~b)**n/b**(n/2)%-b)**2;print~n%2*r/(r&-r)

ลองออนไลน์!

ความน่าจะเป็นที่บอทตายสามารถแสดงเป็น:

f(n)=2ss2, where s=12n(nn/2)

และทวินามเป็นที่เข้าใจกันว่าเท่ากับเมื่อไม่ได้ทั้งหมด0n/2

เราสามารถให้เหตุผลเช่นนี้ ความน่าจะเป็นที่บอทตกลงบนเส้นคืออะไร? สิ่งนี้จะเกิดขึ้นหากจำนวนการเคลื่อนไหวขึ้นและลงทั้งหมดเท่ากับจำนวนการเคลื่อนไหวลงและขวาทั้งหมด นี่เป็นความน่าจะเป็นแบบเดียวกันที่คุณพูดว่าคุณพลิกเหรียญครั้งและได้ก้อยเป็นจำนวนมาก คุณต้องเลือกการพลิกเพื่อให้เป็นหัวของการโยนซึ่งสามารถทำได้ในวิธี, ของลำดับที่เป็นไปได้โดยรวมy=xnn/2n(nn/2)2n

s=12n(nn/2)

น่าจะเป็นของเชื่อมโยงไปถึงบรรทัดนี้ยังsดังนั้นความน่าจะเป็นของการลงจอดบนเส้นใดเส้นหนึ่งคือผลรวมของสิ่งเหล่านี้หรือยกเว้นว่าเรากำลังนับความน่าจะเป็นที่การลงจอดของทั้งสองบรรทัดและต้องลบมันเพื่อชดเชยy=xs2sx=y=0

ปรากฎว่าความน่าจะเป็นของการลงจอดบนเป็นเพียง , ผลิตภัณฑ์ของความน่าจะเป็นของการลงจอดในแต่ละบรรทัด เราสามารถโต้เถียงเหตุการณ์ต่าง ๆ ได้อย่างอิสระดังนี้: ถ้าเราเลือกลำดับสุ่มของ "Up or Left" และ "Down or Right" ที่เท่ากันเพื่อลงบนและเช่นเดียวกันกับ "Up or Right" และ "Down หรือ Left" "สำหรับเราสามารถรวมมันเข้าด้วยกันเป็นลำดับขึ้น, ลง, ซ้าย, ขวาโดยการตัดกันของคู่ของทิศทางในแต่ละตำแหน่งx=y=0s2x=yx=y

ดังนั้นน่าจะเป็นของการลงจอดบนหรือเป็น 2x=yx=y2ss2

รหัสคำนวณทวินามใช้สำนวนนี้เป็นฐาน เพื่อแยกเศษจากส่วนความน่าจะเป็นที่เราทราบว่าตัวหารเป็นอำนาจของ 2 ดังนั้นเราจึงใช้การแสดงออกที่จะแบ่งออกอำนาจสูงสุดของ 2 จะแสดงเป็นเคล็ดลับบิตคลาสสิก(nn/2)(b+1)**n/b**(n/2)%bb=2**nr/(r&-r)rr&-r

การแก้ปัญหาคือแข็งแรงเล่นกอล์ฟโดยการเขียนเป็นเพื่อให้มีการอ้างอิงเพียงครั้งเดียวและทำงานได้โดยไม่ต้องเศษส่วนให้อยู่ในจำนวนเต็ม การคำนวณคือ polynomial-time ในถึงแม้จะมีวิธีการคำนวณทวินามที่สนุกสนาน2ss21(1s)2s1/2nn


หลังจากเขียนหลักฐานความน่าจะเป็นที่บอทเสียชีวิตฉันพบวิธีที่เป็นไปได้ที่ดีกว่าในการพิสูจน์และนำเสนอ

ลองติดตามค่าของและหลังจากย้ายบอทแต่ละครั้ง ทิศทางทั้งสี่ทิศทางขึ้นลงซ้ายและขวาเพิ่มขึ้นหรือลดลงแต่ละทิศทางของและโดยมีสี่ทิศทางที่สอดคล้องกับชุดค่าผสมทั้งสี่a=x+yb=xyab

ดังนั้นการย้ายสุ่มเทียบเท่ากับการสุ่มเพิ่มเพื่อและเป็นอิสระที่จะขนี้จะเทียบเท่ากับการทำเดินสุ่มแยกและขa ± 1 b a b±1a±1bab

ตอนนี้หุ่นยนต์ปลายบนเส้นหรือว่าเมื่อหรือ 0 ดังนั้นน่าจะเป็นของที่ลงท้ายด้วยมีและเช่นเดียวกันสำหรับ 0 ตั้งแต่เดินมีความเป็นอิสระน่าจะเป็นที่และคือจึงน่าจะเป็นที่อย่างน้อยหนึ่งเป็นศูนย์เป็นส่วนประกอบ 2x = - y a = 0 b = 0 a = 0 s = 1x=yx=ya=0b=0a=0 b=0a0b0(1-s)21-(1-s)2s=12n(nn/2)b=0a0b0(1s)21(1s)2


3
Fantastic! ฉันกำลังรอคนที่จะได้รับสิ่งนี้ ฉันไม่คิดว่ามันจะเร็วนัก ข้อเสียในขณะนี้คือคำตอบอื่น ๆ ส่วนใหญ่ไม่ต้องคิดมาก :( ยอดเยี่ยม +1
Don Thousand

เพลิดเพลินไปกับความโปรดปรานเล็ก ๆ น้อย ๆ (ไม่ต้องเสียใจอะไรมากมาย)
Don Thousand

1
@RushabhMehta ขอบคุณคุณเป็นคนใจดีมาก! เงินรางวัลของคุณกระตุ้นให้ฉันเขียนหลักฐานที่สะอาดกว่าที่ฉันคิดในภายหลัง
xnor

แรงบันดาลใจที่แท้จริงสำหรับปัญหานี้คือ AIME I 2014 ปัญหา 11 หากคุณต้องการตรวจสอบ
Don Thousand
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.