เมื่อทำการซ้อนหนังสือคุณมักต้องการวางหนังสือที่ใหญ่ที่สุดไว้ที่ด้านล่างและหนังสือที่มีขนาดเล็กที่สุดอยู่ด้านบน อย่างไรก็ตาม OCD แฝงตัวของฉันทำให้ฉันรู้สึกไม่สบายใจมากถ้าฉันมีหนังสือสองเล่มที่หนึ่งสั้น (สูง) แต่กว้างกว่าหนังสือเล่มอื่น ไม่ว่าจะเรียงตามลำดับใดก็ตามฉันจะวางหนังสือยอดนิยมไว้บนหนังสือเล่มใดเล่มหนึ่งด้านล่าง
เป็นตัวอย่างที่บอกว่าหนังสือเล่มหนึ่งมีขนาด(10,15)
และอื่น ๆ (11,14)
มีขนาด ไม่ว่าฉันจะใส่พวกมันไปทางไหนฉันก็จะยื่นออกมา แต่ถ้าฉันมีหนังสือที่มีมิติ(4,3)
และ(5,6)
ฉันสามารถหลีกเลี่ยงการแขวนโดยวางหนังสือไว้ด้านล่างเก่า
สำหรับวัตถุประสงค์ของการท้าทายนี้เราจะพิจารณายื่นเฉพาะในความสัมพันธ์กับหนังสือเล่มนี้ได้ทันทีด้านล่าง เช่นถ้าฉันมีสแต็(5,5)
ก(3,3)
, (4,4)
(ไม่ใช่คนที่มีสติจะทำอย่างนั้น) หนังสือยอดนิยมนับว่าเป็นสิ่งที่แขวนอยู่แม้ว่ามันจะไม่ขยายออกไปจากหนังสือด้านล่าง ในทำนองเดียวกันสแต็ค(3,3)
, (3,3)
,(4,4)
นอกจากนี้ยังมีเพียงคนเดียวที่แขวนอยู่แม้จะมีหนังสือด้านบนขยายเกินหนึ่งด้านล่าง
ความท้าทาย
รับรายการคู่เต็มจำนวนสำหรับขนาดหนังสือเรียงลำดับคู่ / หนังสือเหล่านั้นเพื่อให้จำนวนของสิ่งที่แขวนอยู่มีน้อยที่สุด คุณต้องไม่หมุนหนังสือ - ฉันต้องการหนามทั้งหมดหันไปในทิศทางเดียวกัน หากมีวิธีแก้ปัญหาหลายอย่างที่มีจำนวนกระเช้าแขวนเท่ากันคุณสามารถเลือกคำสั่งดังกล่าวได้ อัลกอริทึมการเรียงลำดับของคุณไม่จำเป็นต้องมีเสถียรภาพ การดำเนินงานของคุณอาจคิดว่าหนังสือเล่มขนาดน้อยกว่า 2 16แต่ละ
ความซับซ้อนของเวลา:ในการทำให้สิ่งนี้น่าสนใจยิ่งขึ้นความซับซ้อนเชิงกรณีที่แย่ที่สุดของอัลกอริทึมของคุณจะต้องเป็นพหุนามในขนาดของสแต็ก ดังนั้นคุณไม่สามารถทดสอบการเปลี่ยนรูปทุกครั้งที่เป็นไปได้ โปรดรวมการพิสูจน์สั้น ๆ เกี่ยวกับการเพิ่มประสิทธิภาพและความซับซ้อนของอัลกอริทึมของคุณ แน่นอนคุณไม่สามารถใช้ขนาดสูงสุดของอินพุตเป็นอาร์กิวเมนต์ที่โค้ดของคุณทำงานใน O (1)
คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่นรับอินพุตผ่าน STDIN, ARGV หรืออาร์กิวเมนต์ของฟังก์ชันในรูปแบบรายการที่สะดวก (ไม่ได้ประมวลผลล่วงหน้า) และพิมพ์หรือส่งคืนผลลัพธ์
นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุด (เป็นไบต์) ชนะ
ฉันมั่นใจว่ามีคำตอบพหุนามอยู่ แต่หากคุณพิสูจน์ได้ว่าผิดฉันอาจส่งหลักฐานดังกล่าวแทนการยื่นแบบกอล์ฟ ในกรณีนี้คุณอาจคิดP ≠ NP ฉันจะยอมรับหลักฐานดังกล่าวที่ถูกต้องเป็นครั้งแรกและมอบรางวัลให้แก่มัน
ตัวอย่าง
In: [[1, 1], [10, 10], [4, 5], [7, 5], [7, 7], [10, 10], [9, 8], [7, 5], [7, 5], [3, 1]]
Out: [[10, 10], [10, 10], [9, 8], [7, 7], [7, 5], [7, 5], [7, 5], [4, 5], [3, 1], [1, 1]]
In: [[4, 5], [5, 4], [5, 4], [5, 4], [5, 4], [4, 5], [4, 5], [4, 5], [5, 4], [4, 5]]
Out: [[4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [5, 4], [5, 4], [5, 4], [5, 4], [5, 4]]
or [[5, 4], [5, 4], [5, 4], [5, 4], [5, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5]]
In: [[2, 3], [1, 1], [5, 5], [7, 1]]
Out: [[5, 5], [2, 3], [7, 1], [1, 1]]
or [[5, 5], [2, 3], [1, 1], [7, 1]]
or [[7, 1], [5, 5], [2, 3], [1, 1]]
or [[7, 1], [1, 1], [5, 5], [2, 3]]
ฉันสร้างสิ่งเหล่านี้ขึ้นมาด้วยมือดังนั้นโปรดแจ้งให้เราทราบหากคุณพบข้อผิดพลาดใด ๆ