สมมติว่าเรามีอาร์เรย์ A ที่มีองค์ประกอบ n ฟังก์ชัน F(p) คืออาร์เรย์ที่จัดเรียงของผลรวมขององค์ประกอบที่อยู่ติดกันใน p ดังนั้น F(p) =sort([p1 + p2, p2 + p3, ... pn-1 + pn]) เรามีการเรียงสับเปลี่ยนที่แสดงใน A เราต้องหาการเปลี่ยนแปลงที่แตกต่างกันของ A โดยที่ F(A) เหมือนกัน
ดังนั้น หากอินพุตเป็น A =[2, 1, 6, 5, 4, 3] ผลลัพธ์จะเป็น [1, 2, 5, 6, 3, 4] เพราะ F(A)=sort( [2+1, 1+6, 6+5, 5+4, 4+3]) =เรียงลำดับ([3, 7, 11, 9, 7]) =[3,7,7,9,11] และ sort([1+2, 2+5, 5+6, 6+3, 3+4]) =sort([3, 7, 11, 9, 7]) =[3, 7, 7, 9, 11]. (อาจมีคำตอบอื่นๆ ด้วยเช่นกัน)
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
n := size of A for initialize i := n - 1, when i >= 0, update (decrease i by 1), do: print A[i]
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; void solve(vector<int> A) { int n = A.size(); for (int i = n - 1; i >= 0; i--) cout << A[i] << ", "; } int main() { vector<int> A = { 2, 1, 6, 5, 4, 3 }; solve(A); }
อินพุต
{ 2, 1, 6, 5, 4, 3 }
ผลลัพธ์
3, 4, 5, 6, 1, 2,