C++ 为';图纸固定';
最近我遇到了这个问题[评论中的链接],这里有一个摘录 Siruseri碰巧有一些印度和印度最好的棋手 Siruseri体育日历中最重要的事件之一是 一年一度的国际象棋挑战赛,来自Siruseri和Navalur的团队 竞争 该活动在Siruseri和Navalur轮流举行。今年 比赛将在Sirseri举行,Siruseri的秘书, 谁将参加今年的连任,谁愿意确保选举获胜 西尔乌里。自从发动战争或指控纳瓦卢拥有 大规模杀伤性武器超出了他的范围(他也有一些武器) (比自由世界的平均领导人还要多的脑细胞)他决定 做些聪明的事。绘图修正 要理解他打算做什么,我们需要知道国际象棋是如何下棋的 挑战赛是有组织的。Siruseri和Navalur都需要 派遣N名球员。两个队的每个球员都参加了比赛 一个游戏(因此正好玩了N个游戏)。预计主持人将 抽签决定谁打谁。我们的秘书计划解决这个问题 画,使配对完全符合他想要的 每个棋手都有一个ELO等级,表明他有多优秀。这个 评级越高,球员表现越好。局长知道这个问题 Siruseri和Navalur团队中每位球员的评级,以及他 希望将它们配对,以便 Siruseri玩家的ELO等级最高 例如,假设N为4,玩家的评级为 下: 然后,部长可以安排Siruseri获得更高的评级 4场比赛中有3场。例如,他可以通过将它们配对为 (1,2)、(2,4)、(3,3)和(4,1),其中(i,j)指来自 Siruseri扮演纳瓦卢的球员j。这是他能做的最好的了 来自Siruseri的玩家可以击败来自Navalur的玩家1 你的任务是帮助秘书找到一个能最大限度提高效率的配对 Siruseri具有更高评级的对数 到目前为止还不错,我能编出一个算法,然后尝试了两种方法来实现它,但都是徒劳的,从理论上讲,我找不到这个算法有任何错误。但可能是一些我不太了解的角落案例,有谁能有更好的方法解决这个问题吗 以下是我所研究的(注释中的代码是我所说的另一种方法)C++ 为';图纸固定';,c++,algorithm,vector,C++,Algorithm,Vector,最近我遇到了这个问题[评论中的链接],这里有一个摘录 Siruseri碰巧有一些印度和印度最好的棋手 Siruseri体育日历中最重要的事件之一是 一年一度的国际象棋挑战赛,来自Siruseri和Navalur的团队 竞争 该活动在Siruseri和Navalur轮流举行。今年 比赛将在Sirseri举行,Siruseri的秘书, 谁将参加今年的连任,谁愿意确保选举获胜 西尔乌里。自从发动战争或指控纳瓦卢拥有 大规模杀伤性武器超出了他的范围(他也有一些武器) (比自由世界的平均领导人还要多的脑细
#包括
#包括
#包括
#包括
布尔排序(常数std::pairfirst,常数std::pairsecond){
返回first.second>second.second;
}
int main(){
int n;
标准:cin>>n;
std::矢量家(n);
std::vectorvisitors(n);//用于在排序时维护索引的对
对于(int i=0;i>home[i]),第二;
home[i].first=i;//索引中的第一个,接下来是该玩家的ELO评分
}
对于(int i=0;i>visitors[i]),第二;
访客[i].first=i;
}
排序(home.begin()、home.end()、排序);
排序(visitors.begin()、visitors.end()、ordering);//两个团队都已排序
/*对于(int i=0;如果您将“return first.second>second.second;”更改为“return first.secondsecond.second;”更改为“return first.second#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
bool ordering(const std::pair<int,int>first,const std::pair<int,int>second){
return first.second > second.second;
}
int main(){
int n;
std::cin >> n;
std::vector<std::pair<int,int> >home(n);
std::vector<std::pair<int,int> >visitors(n);// Pair for maintaining the index when they are sorted
for(int i=0;i<n;i++){
std::cin >> home[i].second;
home[i].first = i;// first one in the index , next comes the ELO rating for the player
}
for(int i=0;i<n;i++){
std::cin >> visitors[i].second;
visitors[i].first = i;
}
sort(home.begin(),home.end(),ordering);
sort(visitors.begin(),visitors.end(),ordering);// both the teams are sorted
/*for(int i=0;i<n;i++){
std::cout << home[i].first+1 << ' ' << visitors[i].first+1 << std::endl;
}*/
std::vector<int>greater(n,-1);
std::vector<int>remaining;
int sizeG = 0;
int sizeR = 0;
/* int size = 0;
int i=0,j=0,k=n-1; //Another process copied from a solution , simillar to mine one but still it doesnt works
while(j<n){
if(home[i].second < visitors[j].second){
greater[home[k].first] = visitors[j].first;
j++;k--;
}else{
greater[home[i].first] = visitors[j].first;
i++;j++;size++;
}
}
std::cout << size << std::endl;
for(int i=0;i<n;i++){
std::cout << greater[i]+1<< std::endl;
}*/
for(int i=0;i<n;i++){
if(visitors[i].second < home[sizeG].second){
//std::cout << visitors[i].second << ' ' << home[sizeG].second << ' ' << home[sizeG].first << std::endl;
greater[home[sizeG].first] = visitors[i].first+1;
//std::cout<< home[sizeG].first+1 << ' ' <<visitors[i].first+1 << std::endl;
sizeG++;
}else{
remaining.push_back(visitors[i].first+1);
sizeR++;
}
}
std::cout << sizeG << std::endl;
//std::cout << std::endl;
int j=sizeR-1;
for(int i=0;i<n;i++){
if(greater[i] == -1){
greater[i] = remaining[j];
j--;
}
std::cout << greater[i] << std::endl;
}
/*std::cout << std::endl;
for(int i=0;i<sizeR;i++){
std::cout << remaining[i] << std::endl;
}*/
return 0;
}