| Run ID | 作者 | 问题 | 语言 | 测评结果 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|
| 71171 | sh25_zhoumy | 田忌赛马 | C++ | 解答错误 | 0 MS | 244 KB | 1222 | 2025-10-24 15:33:27 |
#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; }