提交时间:2025-10-24 15:33:27
运行 ID: 71171
#include <iostream> #include <vector> #include <algorithm> using namespace std; vector<int> opponent; int N, X; vector<int> current; vector<vector<int>> result; void backtrack(int index) { if (index == N) { int my_wins = 0; for (int i = 0; i < N; i++) { if (current[i] >= opponent[i] + X) { my_wins++; } } if (my_wins > N / 2) { result.push_back(current); } return; } for (int i = 1; i <= N; i++) { if (find(current.begin(), current.end(), i) == current.end()) { current[index] = i; backtrack(index + 1); } } } int main() { cin >> N >> X; opponent.resize(N); for (int i = 0; i < N; i++) { cin >> opponent[i]; } current.resize(N); backtrack(0); sort(result.begin(), result.end()); result.erase(unique(result.begin(), result.end()), result.end()); for (const auto& sol : result) { for (int i = 0; i < N; i++) { cout << sol[i]; if (i < N - 1) cout << " "; } cout << endl; } return 0; }