象棋比赛Chess
【问题描述】有N个人要参加国际象棋比赛,该比赛要进行K场对弈。每个人最多参加两场对弈,最少参加零场对弈。每个人都有一个与他人都不相同的等级(用一个正整数来表示)。
在对弈中,等级高的人必须用黑色的棋子,等级低的人必须用白色的棋子。 每个人最多只能用一次黑色的棋子和一次白色的棋子。
为了增加比赛的客观度,观众希望K场对弈中双方等级差的总和最小。比如有7个选手,他们的等级分别是30,17,26,41,19,38,18,要进行3场比赛,最好的安排是 2 vs 7, 7 vs 5,6 vs 4,此时等级差的总和为(18-17)+(19-18)+(41-38)=5 达到最小。
【输入格式】
第一行两个整数N、K。接下来N行,第i行表示第i-1个人等级。
【输出格式】
最小等级差的总和
【输入样例】
7 3
30
17
26
41
19
38
18
【输出样例】
5
【数据范围】
90% N<=3000
100% N<=100000
所有等级值<110 1<=K<=N-1
此题唯一的价值就是做两次排序,对于C++来说,简直没任何价值。代码如下
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int lev[100001];
int cha[100000]

在一场国际象棋比赛中,有N位选手,每位选手的等级各不相同。比赛共进行K场,每场对弈双方等级差需最小。每个选手最多参与两场,一黑一白。给定选手等级和比赛场次,找到最小等级差总和的解决方案。输入包含选手等级和比赛场次,输出是最小等级差总和。当N=7, K=3时,最佳安排可使等级差总和达到最小(5)。题目重点在于两次排序的实现。"
51095392,5626642,使用EasyUI在datagrid中添加合计行,"['datagrid', 'easyui', '前端开发']
最低0.47元/天 解锁文章
1150

被折叠的 条评论
为什么被折叠?



