สมมติว่าคุณมีคนตาย 20 ด้าน คุณเริ่มหมุนแม่พิมพ์นั้นและต้องหมุนสองสามครั้งก่อนที่คุณจะหมุนค่าทั้งหมด 20 คุณสงสัยว่าฉันต้องม้วนจำนวนเท่าไรก่อนที่ฉันจะได้รับโอกาส 50% ในการเห็นค่าทั้งหมด 20 ตัว และn
ฉันต้องม้วนตายกี่ม้วนก่อนจะกลิ้งทุกn
ด้าน?
หลังจากการวิจัยบางอย่างคุณพบว่ามีสูตรสำหรับการคำนวณโอกาสในการหมุนn
ค่าทั้งหมดหลังจากr
ม้วน
P(r, n) = n! * S(r, n) / n**r
โดยที่S(a, b)
หมายถึงตัวเลข Stirling ของชนิดที่สองจำนวนวิธีที่จะแบ่งพาร์ติชันชุดของวัตถุ n (แต่ละม้วน) เป็น k ย่อยที่ไม่ว่างเปล่า (แต่ละด้าน)
คุณยังพบลำดับ OEISที่เราจะเรียกR(n)
ซึ่งสอดคล้องกับลำดับที่เล็กที่สุดr
ที่P(r, n)
อย่างน้อย 50% ความท้าทายคือการคำนวณn
คำที่ลำดับของลำดับนี้โดยเร็วที่สุด
ความท้าทาย
- ได้รับ
n
หาที่เล็กที่สุดr
ที่P(r, n)
มากกว่าหรือเท่ากับ0.5
หรือ 50% - รหัสของคุณในทางทฤษฎีควรจะจัดการกับจำนวนเต็มไม่เป็นลบ
n
เป็น input1 <= n <= 1000000
แต่เราจะได้รับการทดสอบรหัสของคุณในช่วงของ - สำหรับการให้คะแนนเราจะใช้เวลาทั้งหมดที่จำเป็นในการทำงาน
R(n)
เกี่ยวกับปัจจัยการผลิตผ่าน1
10000
- เราจะตรวจสอบว่าการแก้ปัญหาของคุณถูกต้องโดยใช้รุ่นของเรา
R(n)
ในการส่งออกของคุณเพื่อดูว่าP(your_output, n) >= 0.5
และP(your_output - 1, n) < 0.5
เช่นว่าการส่งออกของคุณเป็นจริงที่เล็กที่สุดสำหรับที่กำหนดr
n
- คุณสามารถใช้คำจำกัดความใด ๆ
S(a, b)
ในการแก้ปัญหาของคุณ Wikipediaมีคำจำกัดความหลายประการที่อาจเป็นประโยชน์ที่นี่ - คุณสามารถใช้บิวด์อินในโซลูชันรวมถึงที่คำนวณ
S(a, b)
หรือแม้แต่ที่คำนวณP(r, n)
โดยตรง - คุณสามารถฮาร์โค้ดได้สูงสุด 1,000 ค่า
R(n)
และหนึ่งล้านสเตอร์ลิงแม้ว่าจะไม่มีขีด จำกัด เหล่านี้และสามารถเปลี่ยนแปลงได้หากคุณสามารถโต้แย้งเพื่อโน้มน้าวหรือลดระดับ - คุณไม่จำเป็นต้องตรวจสอบเป็นไปได้ทุก
r
ระหว่างn
และr
เรากำลังมองหา แต่คุณไม่จำเป็นที่จะหาที่เล็กที่สุดr
และไม่เพียงใดที่r
P(r, n) >= 0.5
- โปรแกรมของคุณต้องใช้ภาษาที่รันได้อย่างอิสระบน Windows 10
i7 4790k, 8 GB RAM
ข้อกำหนดของคอมพิวเตอร์ที่จะทดสอบการแก้ปัญหาของคุณ ขอบคุณ@DJMcMayhem ที่ให้คอมพิวเตอร์ของเขาสำหรับการทดสอบ อย่าลังเลที่จะเพิ่มเวลาที่ไม่เป็นทางการของคุณเองสำหรับการอ้างอิง แต่จะมีการกำหนดเวลาอย่างเป็นทางการในภายหลังเมื่อดีเจสามารถทดสอบได้
กรณีทดสอบ
n R(n)
1 1
2 2
3 5
4 7
5 10
6 13
20 67 # our 20-sided die
52 225 # how many cards from a huge uniformly random pile until we get a full deck
100 497
366 2294 # number of people for to get 366 distinct birthdays
1000 7274
2000 15934
5000 44418
10000 95768
100000 1187943
1000000 14182022
แจ้งให้เราทราบหากคุณมีคำถามหรือข้อเสนอแนะ ขอให้โชคดีและการเพิ่มประสิทธิภาพที่ดี!