| Run ID | 作者 | 问题 | 语言 | 测评结果 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|
| 71174 | sh25_zhoumy | 田忌赛马 | C++ | 通过 | 0 MS | 248 KB | 1917 | 2025-10-24 15:34:36 |
#include <iostream> #include <vector> #include <algorithm> using namespace std; int N, X; vector<int> opponent; // 对方马的等级 vector<int> my_horses; // 我方所有马的等级 vector<vector<int>> winning_strategies; // 存储所有获胜方案 // 检查当前方案是否获胜 bool is_winning_strategy(const vector<int>& strategy) { int win_count = 0; for (int i = 0; i < N; i++) { if (strategy[i] - opponent[i] >= X) { win_count++; } } return win_count > N / 2; // 胜场数大于对方 } // 生成所有排列并检查是否获胜 void generate_strategies(vector<int>& current, vector<bool>& used) { if (current.size() == N) { if (is_winning_strategy(current)) { winning_strategies.push_back(current); } return; } for (int i = 0; i < N; i++) { if (!used[i]) { used[i] = true; current.push_back(my_horses[i]); generate_strategies(current, used); current.pop_back(); used[i] = false; } } } int main() { // 读取输入 cin >> N >> X; opponent.resize(N); for (int i = 0; i < N; i++) { cin >> opponent[i]; } // 初始化我方马的等级 (1到N) my_horses.resize(N); for (int i = 0; i < N; i++) { my_horses[i] = i + 1; } // 生成所有方案 vector<int> current; vector<bool> used(N, false); generate_strategies(current, used); // 按字典序排序 sort(winning_strategies.begin(), winning_strategies.end()); // 输出结果 for (const auto& strategy : winning_strategies) { for (int i = 0; i < N; i++) { cout << strategy[i]; if (i < N - 1) cout << " "; } cout << endl; } return 0; }