ปัญหา
ลองนึกภาพ 7 ถังเรียงกันเป็นแถว ที่เก็บข้อมูลแต่ละอันสามารถมีแอปเปิ้ลได้สูงสุด 2 ตัว มี 13 แอปเปิ้ลที่มีป้ายกำกับ 1 ถึง 13 พวกเขามีการกระจายในหมู่ 7 ถัง ตัวอย่างเช่น,
{5,4}, {8,10}, {2,9}, {13,3}, {11,7}, {6,0}, {12,1}
โดยที่ 0 หมายถึงพื้นที่ว่าง ลำดับที่แอปเปิ้ลปรากฏใน แต่ละที่ฝากข้อมูลไม่เกี่ยวข้อง (เช่น {5,4} เทียบเท่ากับ {4,5})
คุณสามารถย้ายแอปเปิ้ลใดก็ได้จากที่ฝากข้อมูลหนึ่งไปยังที่ฝากข้อมูลที่อยู่ติดกันโดยมีที่ว่างในที่ฝากข้อมูลปลายทางสำหรับแอปเปิ้ลอื่น การย้ายแต่ละครั้งจะอธิบายตามจำนวนแอปเปิลที่คุณต้องการย้าย (ซึ่งไม่ชัดเจนเนื่องจากมีพื้นที่ว่างเพียงอันเดียว) ตัวอย่างเช่นการใช้การย้าย
7
การจัดเรียงข้างต้นจะส่งผลให้
{5,4}, {8,10}, {2,9}, {13,3}, {11,0}, {6,7}, {12,1}
วัตถุประสงค์
เขียนโปรแกรมที่อ่านข้อตกลงจาก STDIN และเรียงลำดับลงในข้อตกลงต่อไปนี้
{1,2}, {3,4}, {5,6}, {7,8}, {9,10}, {11,12}, {13,0}
ใช้การเคลื่อนไหวน้อยที่สุด อีกครั้งลำดับที่แอปเปิ้ลปรากฏ ในที่เก็บข้อมูลแต่ละชุดไม่เกี่ยวข้องกัน คำสั่งของถังมีความสำคัญ มันควรจะออกการเคลื่อนไหวที่ใช้ในการเรียงลำดับการจัดเรียงแต่ละคั่นด้วยเครื่องหมายจุลภาค ตัวอย่างเช่น,
13, 7, 6, ...
คะแนนของคุณเท่ากับผลรวมของจำนวนการเคลื่อนไหวที่ต้องใช้ในการแก้ไขข้อตกลงต่อไปนี้:
{8, 2}, {11, 13}, {3, 12}, {6, 10}, {4, 0}, {1, 7}, {9, 5}
{3, 1}, {6, 9}, {7, 8}, {2, 11}, {10, 5}, {13, 4}, {12, 0}
{0, 2}, {4, 13}, {1, 10}, {11, 6}, {7, 12}, {8, 5}, {9, 3}
{6, 9}, {2, 10}, {7, 4}, {1, 8}, {12, 0}, {5, 11}, {3, 13}
{4, 5}, {10, 3}, {6, 9}, {8, 13}, {0, 2}, {1, 7}, {12, 11}
{4, 2}, {10, 5}, {0, 7}, {9, 8}, {3, 13}, {1, 11}, {6, 12}
{9, 3}, {5, 4}, {0, 6}, {1, 7}, {12, 11}, {10, 2}, {8, 13}
{3, 4}, {10, 9}, {8, 12}, {2, 6}, {5, 1}, {11, 13}, {7, 0}
{10, 0}, {12, 2}, {3, 5}, {9, 11}, {1, 13}, {4, 8}, {7, 6}
{6, 1}, {3, 5}, {11, 12}, {2, 10}, {7, 4}, {13, 8}, {0, 9}
ใช่ข้อตกลงแต่ละข้อมีวิธีแก้ไข
กฎระเบียบ
- วิธีการแก้ปัญหาของคุณจะต้องทำงานในเวลาพหุนามในจำนวนถังต่อการย้าย ประเด็นก็คือใช้การวิเคราะห์พฤติกรรมที่ชาญฉลาด
- อัลกอริทึมทั้งหมดจะต้องกำหนดขึ้น
- ในกรณีที่เสมอกันจำนวนไบต์ที่สั้นที่สุดจะชนะ