#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <utility>
#include <vector>
using namespace std;
//田忌赛马,考虑所有排列情况,得到arr1[i] > arr2[i]最多的情况
vector<int> win;//用来保存每种排列的胜利次数
//输入数组
vector<int> getarr(string s){
istringstream iss(s);
string num;
vector<int> arr;
while(iss >> num){
arr.push_back(stoi(num));
}
return arr;
}
//比较两个数组的大小
int get_bigger(vector<int> arr1, vector<int> arr2, int& num){
int count = 0;
for(int i = 0; i < arr1.size(); i++){
if(arr1[i] > arr2[i]){
count++;
}
}
win.push_back(count);//将本次排列的胜利次数载入win数组
return max(num,count);
}
int main() {
string s1;
getline(cin, s1);
vector<int> arr1 = getarr(s1);
string s2;
getline(cin, s2);
vector<int> arr2 = getarr(s2);
int max_win = 0;//统计最大升力次数
sort(arr1.begin(),arr1.end());//先进行排序
do{
max_win = get_bigger(arr1, arr2, max_win);
}while(next_permutation(arr1.begin(), arr1.end()));
int count_win = 0;//记录最大胜利的组数
for(int i = 0;i<win.size(); i++){
if(win[i] == max_win){
count_win++;
}
}
cout << count_win << endl;
}
田忌赛马(C++)
于 2024-05-13 18:00:54 首次发布