Mô tả bài toán
Mảng A n phần tử (n chẵn). n/2 người chơi, mỗi người lấy 2 thẻ. Phân phối sao cho tổng 2 thẻ mỗi người bằng nhau.
Ví dụ
A=[1,5,7,4,4,3] → Sắp xếp: (1,7),(3,5),(4,4) → chỉ số gốc: (0,2),(5,1),(3,4) → tổng 8.
Thuật toán
Tạo mảng cặp (giá trị, chỉ số). Sắp xếp theo giá trị. Ghép cặp nhỏ nhất với lớn nhất, thứ 2 nhỏ với thứ 2 lớn,... In chỉ số.
Code C++
#include <bits/stdc++.h>
using namespace std;
void solve(vector A) {
int n = A.size();
vector> p(n);
for (int i = 0; i < n; i++) {
p[i] = {A[i], i};
}
sort(p.begin(), p.end());
for (int i = 0; i < n/2; i++) {
cout << "(" << p[i].second << ", " << p[n-i-1].second << "), ";
}
}
int main() {
vector A = {1,5,7,4,4,3};
solve(A);
return 0;
}
Đầu vào / Đầu ra
Input: {1,5,7,4,4,3}
Output: (0, 2), (5, 1), (3, 4),