พื้นหลัง
พิจารณาห่วงโซ่ของแท่ง (ปิด) ซึ่งแต่ละอันมีความยาวเต็ม คุณสามารถสร้างโพลีโอโน่แบบไม่มีรูได้หลายแบบด้วยโซ่ที่กำหนด หรืออีกนัยหนึ่งคุณสามารถสร้างรูปหลายเหลี่ยมที่ไม่ได้ตัดกันที่แตกต่างกันซึ่งมีด้านที่จัดเรียงตามแนวแกนได้ด้วยโซ่ที่กำหนด
ลองดูตัวอย่าง พิจารณาห่วงโซ่หนึ่งประกอบด้วย 8 แท่งของความยาว 1 และ 2 ซึ่งเราสามารถแทน[1, 1, 2, 2, 1, 1, 2, 2]
ได้ มากถึงการหมุนและการแปลมีโพลีโม่เทาเพียง 8 ตัวที่เป็นไปได้ (เรานับการสะท้อนกลับที่แตกต่างกัน):
คันแรกนี้เป็นสีน้ำเงินเข้มจากนั้นเราสำรวจรูปหลายเหลี่ยมในแง่ทวนเข็มนาฬิกา
ความรู้สึกของการหมุนไม่ส่งผลต่อผลลัพธ์ในตัวอย่างข้างต้น แต่ลองพิจารณาอีกห่วงโซ่หนึ่ง[3, 1, 1, 1, 2, 1, 1]
ซึ่งให้ผล 3 โปลิโม่ต่อไปนี้:
โปรดสังเกตว่าเราไม่ได้รวมการสะท้อนของโพลีโนมิโนสุดท้ายเพราะจะต้องมีการแวะผ่านตามเข็มนาฬิกา
หากเรามีโซ่ที่มีความยืดหยุ่นมากกว่าที่มีความยาวเท่ากัน[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
จริง ๆ แล้วเราจะสามารถสะท้อนการสะท้อนกลับของโพลีโอนิโนอื่น ๆ รวมเป็น 9:
ความท้าทาย
ให้คำอธิบายของโซ่เป็นอาร์เรย์หรือคล้ายกันกำหนดจำนวนของ polyominoes ที่แตกต่างกันคุณสามารถฟอร์ม (ขึ้นอยู่กับการหมุนและการแปล) โดยใช้แท่งตามลำดับในขณะที่ไปรอบปริมณฑลในแง่ทวนเข็มนาฬิกา
กรุณาเขียนโปรแกรมเต็มรูปแบบและรวมคำสั่งเพื่อรวบรวม (ถ้ามี) และเรียกใช้รหัสของคุณจากบรรทัดคำสั่ง โปรดใส่ลิงก์ไปยังคอมไพเลอร์ / ล่ามฟรีสำหรับภาษาของคุณ
โปรแกรมของคุณควรอ่านอินพุตจาก STDIN บรรทัดแรกจะมีจำนวนเต็มM บรรทัดMถัดไปจะเป็นกรณีทดสอบซึ่งแต่ละรายการจะเป็นรายการความยาวก้านที่คั่นด้วยช่องว่าง โปรแกรมของคุณควรพิมพ์บรรทัดMไปที่ STDOUT ซึ่งแต่ละรายการจะประกอบด้วยเลขจำนวนเต็มเดียวซึ่งเป็นจำนวนโพลีโม่แบบต่าง ๆ ที่สามารถเกิดขึ้นได้
คุณต้องใช้เธรดเดียวเท่านั้น
โปรแกรมของคุณต้องไม่ใช้หน่วยความจำมากกว่า 1 GB ในเวลาใดก็ได้ (นี่ไม่ใช่ข้อ จำกัด ที่เข้มงวดอย่างสมบูรณ์ แต่ฉันจะตรวจสอบการใช้งานหน่วยความจำของปฏิบัติการของคุณและฆ่ากระบวนการใด ๆ ที่ใช้มากกว่า 1 GB อย่างสม่ำเสมอหรือมีหนามแหลมด้านบน)
เพื่อป้องกันการคำนวณล่วงหน้ามากเกินไปรหัสของคุณจะต้องไม่เกิน 20,000 ไบต์และคุณต้องไม่อ่านไฟล์ใด ๆ
คุณต้องไม่ปรับให้เหมาะกับกรณีทดสอบเฉพาะที่เลือก (เช่นโดยการเข้ารหัสผลลัพธ์ของพวกเขา) หากฉันสงสัยว่าคุณทำฉันขอสงวนสิทธิ์ในการสร้างชุดมาตรฐานใหม่ ชุดทดสอบเป็นแบบสุ่มดังนั้นประสิทธิภาพของโปรแกรมของคุณสำหรับชุดนั้นควรเป็นตัวแทนสำหรับประสิทธิภาพของชุดข้อมูลนั้น ข้อสมมุติเดียวที่คุณอนุญาตให้ทำคือผลรวมของความยาวแท่งเป็นเท่ากัน
เกณฑ์การให้คะแนน
ฉันได้จัดทำชุดมาตรฐานสำหรับโซ่ของN = 10, 11, ... , 20 แท่ง ชุดทดสอบแต่ละชุดประกอบด้วย 50 โซ่สุ่มที่มีความยาวระหว่าง 1 และ 4 รวม
คะแนนหลักของคุณคือN ที่ใหญ่ที่สุดซึ่งโปรแกรมของคุณเสร็จสิ้นการทดสอบทั้งหมดภายใน 5 นาที (ในเครื่องของฉันภายใต้ Windows 8) tie breaker จะเป็นเวลาที่โปรแกรมของคุณทำการทดสอบ
หากใครชนะชุดทดสอบที่ใหญ่ที่สุดฉันจะเพิ่มชุดทดสอบที่ใหญ่กว่านี้ต่อไป
กรณีทดสอบ
คุณสามารถใช้กรณีทดสอบต่อไปนี้เพื่อตรวจสอบความถูกต้องของการนำไปใช้ของคุณ
Input Output
1 1 0
1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 3
1 1 1 1 1 1 1 1 1 1 9
1 1 1 1 1 1 1 1 1 1 1 1 36
1 1 1 1 1 1 1 1 1 1 1 1 1 1 157
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 758
1 1 2 2 1 1 2 2 8
1 1 2 2 1 1 2 2 1 1 23
1 1 2 2 1 1 2 2 1 1 2 2 69
1 2 1 2 1 2 1 2 3
1 2 1 2 1 2 1 2 1 2 1 2 37
1 2 3 2 1 2 3 2 5
1 2 3 2 1 2 3 2 1 2 3 2 23
3 1 1 1 2 1 1 3
1 2 3 4 5 6 7 1
1 2 3 4 5 6 7 8 3
1 2 3 4 5 6 7 8 9 10 11 5
2 1 5 3 3 2 3 3 4
4 1 6 5 6 3 1 4 2
3 5 3 5 1 4 1 1 3 5
1 4 3 2 2 5 5 4 6 4
4 1 3 2 1 2 3 3 1 4 18
1 1 1 1 1 2 3 3 2 1 24
3 1 4 1 2 2 1 1 2 4 1 2 107
2 4 2 4 2 2 3 4 2 4 2 3 114
คุณพบไฟล์อินพุตที่มีอยู่ตรงนี้
ลีดเดอร์บอร์ด
User Language Max N Time taken (MM:SS:mmm)
1. feersum C++ 11 19 3:07:430
2. Sp3000 Python 3 18 2:30:181