จีนที่เหลือทฤษฎีบทบอกเราว่าเราสามารถหาตัวเลขที่เหลือผลิตใด ๆ ต้องอยู่ภายใต้โมดูลที่สำคัญที่แตกต่างกัน เป้าหมายของคุณคือการเขียนโค้ดเพื่อเอาท์พุทจำนวนดังกล่าวในเวลาพหุนาม รหัสที่สั้นที่สุดชนะ
ตัวอย่างเช่นสมมติว่าเราได้รับข้อ จำกัด เหล่านี้ ( %
หมายถึง mod):
n % 7 == 2
n % 5 == 4
n % 11 == 0
n=44
ทางออกหนึ่งคือ ข้อ จำกัด แรกคือความพึงพอใจเพราะ44 = 6*7 + 2
และเพื่อให้44
มีที่เหลือ2
เมื่อหารด้วยและทำให้7
44 % 7 == 2
อีกสองข้อ จำกัด จะพบเช่นกัน มีอยู่แก้ปัญหาอื่น ๆ เช่นและn=814
n=-341
อินพุต
รายการที่ไม่ว่างเปล่าของคู่(p_i,a_i)
ซึ่งแต่ละโมดูลัสp_i
เป็นสำคัญแตกต่างกันและแต่ละเป้าหมายเป็นจำนวนธรรมชาติในช่วงa_i
0 <= a_i < p_i
คุณสามารถป้อนข้อมูลในแบบฟอร์มใดก็ได้ที่สะดวก ไม่จำเป็นต้องเป็นรายการคู่ คุณอาจไม่คิดว่าอินพุตถูกเรียงลำดับ
เอาท์พุต
จำนวนเต็มn
เช่นว่าสำหรับแต่ละดัชนีn % p_i == a_i
i
ไม่จำเป็นต้องมีค่าน้อยที่สุดและอาจเป็นค่าลบ
การ จำกัด เวลาพหุนาม
เพื่อป้องกันไม่ให้การแก้ปัญหาราคาถูกที่มีเพียงแค่พยายามn=0
, n=1
, n=2
และอื่น ๆ รหัสของคุณจะต้องทำงานในเวลาพหุนามในความยาวของการป้อนข้อมูล โปรดทราบว่าตัวเลขm
ในอินพุตมีความยาวΘ(log m)
ดังนั้นm
ตัวมันเองจึงไม่ใช่พหุนามในความยาว ซึ่งหมายความว่าคุณไม่สามารถนับถึงm
หรือทำm
เวลาดำเนินการได้แต่คุณสามารถคำนวณการดำเนินการทางคณิตศาสตร์กับค่าได้
คุณไม่สามารถใช้รูปแบบการป้อนข้อมูลที่ไม่มีประสิทธิภาพเช่นเดียวกับที่ไม่ได้รับสิ่งนี้
เรย์แบนอื่น ๆ
ไม่อนุญาตให้ใช้บิวด์อินเพื่อทำสิ่งต่อไปนี้: ใช้ทฤษฎีส่วนที่เหลือของจีน, แก้สมการหรือตัวเลขปัจจัย
คุณอาจใช้บิวด์อินเพื่อค้นหา mods และทำการบวกลบการคูณและการยกกำลังแบบแยกส่วน (ด้วยเลขชี้กำลังเป็นธรรมชาติ) คุณไม่สามารถใช้การทำงานแบบแยกส่วนอื่น ๆ ในตัวได้รวมถึงการผกผันแบบแยกส่วนการหารและการค้นหาคำสั่งซื้อ
กรณีทดสอบ
สิ่งเหล่านี้ให้โซลูชันที่ไม่เป็นลบที่เล็กที่สุด คำตอบของคุณอาจแตกต่างกัน มันอาจจะดีกว่าถ้าคุณตรวจสอบโดยตรงว่าเอาต์พุตของคุณตรงตามข้อ จำกัด แต่ละข้อ
[(5, 3)]
3
[(7, 2), (5, 4), (11, 0)]
44
[(5, 1), (73, 4), (59, 30), (701, 53), (139, 112)]
1770977011
[(982451653, 778102454), (452930477, 133039003)]
68121500720666070