บทนำ
ลองสังเกตลำดับต่อไปนี้ (จำนวนเต็มไม่เป็นลบ):
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ...
ตัวอย่างเช่นลองหาตัวเลขสามตัวแรก 0, 1, 2
เหล่านี้เป็น หมายเลขที่ใช้ในลำดับนี้สามารถสั่งซื้อได้หกวิธี:
012 120
021 201
102 210
ดังนั้นขอบอกว่าF (3) = 6 อีกตัวอย่างหนึ่งคือF (12) สิ่งนี้มีตัวเลข:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
หรือรุ่นที่ต่อกัน:
01234567891011
ในการค้นหาจำนวนวิธีที่จะจัดเรียงสิ่งนี้ใหม่อันดับแรกเราต้องดูความยาวของสตริงนี้ 14
ความยาวของสายนี้คือ ดังนั้นเราคำนวณ14! . อย่างไรก็ตามตัวอย่างเช่นสถานที่สามารถแลกเปลี่ยนสถานที่ได้โดยไม่กระทบกับสตริงสุดท้าย มี 2 ศูนย์ดังนั้นมี2! วิธีในการเปลี่ยนเลขศูนย์โดยไม่รบกวนการสั่งซื้อ นอกจากนี้ยังมี 4 รายการดังนั้นจึงมี4! วิธีในการสลับสับเปลี่ยน เราหารผลรวมด้วยตัวเลขสองตัวนี้:
มี14! / (4! × 2!) = 1816214400 01234567891011
วิธีในการจัดสตริง ดังนั้นเราจึงสามารถสรุปได้ว่าF (12) = 1816214400
งาน
ป.ร. ให้ไว้ไม่มีเอาท์พุทF (N) สำหรับคนที่ไม่ต้องการคำแนะนำ ในการคำนวณ F (N) อันดับแรกเราทำการเชื่อมต่อจำนวนเต็ม N ที่ไม่ใช่ลบแรก (เช่นสำหรับ N = 12 สตริงที่ต่อกันจะเป็น01234567891011
) และคำนวณจำนวนวิธีที่จะจัดเรียงสตริงนี้
กรณีทดสอบ
Input: Output:
0 1
1 1
2 2
3 6
4 24
5 120
6 720
7 5040
8 40320
9 362880
10 3628800
11 119750400
12 1816214400
13 43589145600
14 1111523212800
15 30169915776000
บันทึก
การคำนวณคำตอบที่ต้องได้รับการคำนวณภายในกำหนดเวลา 10 วินาที , เดรัจฉานบังคับให้เป็นไม่ได้รับอนุญาต
นี่คือโค้ดกอล์ฟดังนั้นการส่งที่มีจำนวนไบต์น้อยที่สุดจะชนะ!
10
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
สิบหลักที่แตกต่างกันดังนั้นผลที่ได้คือ 10!
0
กรณีกำลังขว้างของฉันออก (สตริงว่างที่โง่)
F(N)
ไม่ใช่O(N!)
และนั่นlog F(N)
ก็O(log N!)
เป็นเพียงลางสังหรณ์ ...
10
ถูกต้องหรือไม่ รู้สึกว่าควรน้อยกว่า 10! เนื่องจากเป็นจุดเริ่มต้นของตัวเลขที่ซ้ำกัน