พื้นหลัง
ฉันต้องการสร้างรั้ว ด้วยเหตุนี้ฉันจึงรวบรวมเสาจำนวนมากและติดมันกับพื้น ฉันได้รวบรวมกระดานมากมายที่ฉันจะตอกตะปูกับเสาเพื่อทำรั้วจริง ฉันมักจะถูกพาตัวไปสร้างสิ่งต่าง ๆ และส่วนใหญ่ฉันจะเอาไม้กระดานไปไว้ที่เสาจนกว่าจะไม่มีที่ว่างสำหรับใส่มัน ฉันต้องการให้คุณแจกแจงรั้วที่เป็นไปได้ที่ฉันสามารถท้ายด้วย
อินพุต
อินพุตของคุณคือรายการของพิกัดจำนวนเต็มสองมิติที่แสดงถึงตำแหน่งของเสาในรูปแบบที่สะดวก คุณสามารถสันนิษฐานได้ว่ามันไม่มีสิ่งที่ซ้ำกัน แต่คุณไม่สามารถคิดอะไรเกี่ยวกับคำสั่งซื้อ
บอร์ดถูกแสดงโดยเส้นตรงระหว่างเสาและเพื่อความง่ายเราพิจารณาเฉพาะบอร์ดแนวนอนและแนวตั้ง สองขั้วสามารถเข้าร่วมโดยคณะกรรมการหากไม่มีเสาอื่น ๆ หรือบอร์ดระหว่างพวกเขาหมายความว่าบอร์ดไม่สามารถข้ามกันและกัน การจัดเรียงของเสาและแผงเป็นสูงสุดถ้าไม่มีบอร์ดใหม่ที่สามารถเพิ่มลงไป (เท่ากันมีทั้งเสาหรือคณะกรรมการใด ๆ ระหว่างสองขั้วในแนวนอนหรือแนวตั้งชิดก)
เอาท์พุต
ผลลัพธ์ของคุณคือจำนวนข้อตกลงสูงสุดที่สามารถสร้างขึ้นได้โดยใช้เสา
ตัวอย่าง
พิจารณารายการอินพุต
[(3,0),(1,1),(0,2),(-1,1),(-2,0),(-1,-1),(0,-2),(1,-1)]
มองจากด้านบนการจัดเรียงที่สอดคล้องกันของเสามีลักษณะดังนี้:
o
o o
o o
o o
o
มีการจัดเรียงสูงสุดสามอย่างที่สามารถสร้างได้โดยใช้เสาเหล่านี้:
o o o
o-o o|o o-o
o----o o||| o o| | o
o-o o|o o-o
o o o
3ดังนั้นการส่งออกที่ถูกต้องคือ
กฎระเบียบ
คุณสามารถเขียนฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบ จำนวนไบต์ต่ำสุดที่ชนะและช่องโหว่มาตรฐานไม่ได้รับอนุญาต
กรณีทดสอบ
[] -> 1
[(0,0),(1,1),(2,2)] -> 1
[(0,0),(1,0),(2,0)] -> 1
[(0,0),(0,1),(1,0),(1,1)] -> 1
[(1,0),(0,1),(-1,0),(0,-1)] -> 2
[(3,0),(1,1),(0,2),(-1,1),(-2,0),(-1,-1),(0,-2),(1,-1)] -> 3
[(0,0),(4,0),(1,1),(1,-2),(3,1),(3,-2),(2,-1),(4,-1)] -> 3
[(0,0),(4,0),(1,1),(1,-2),(3,1),(3,-2),(2,-1),(4,-1),(0,-1)] -> 4
[(0,0),(4,0),(1,1),(1,-2),(3,1),(3,-2),(2,-1),(0,-1),(2,2)] -> 5
[(0,0),(4,0),(1,1),(1,-2),(3,1),(3,-2),(2,-1),(4,-1),(0,-1),(2,2)] -> 8
(0,-2)จับที่ดี เปลี่ยนตอนนี้