洛谷 P1626 象棋比赛
2024-08-28 05:47:16
题目描述
有N个人要参加国际象棋比赛,该比赛要进行K场对弈。每个人最多参加两场对弈,最少参加零场对弈。每个人都有一个与其他人不相同的等级(用一个正整数来表示)。
在对弈中,等级高的人必须用黑色的棋子,等级低的人必须用白色的棋子。每个人最多只能用一次黑色的棋子和一次白色的棋子。为增加比赛的可观度,观众希望K场对弈中双方的等级差的总和最小。
比如有7个选手,他们的等级分别是30,17,26,41,19,38,18,要进行3场比赛。最好的安排是选手2对选手7,选手7对选手5,选手6对选手4。此时等级差的总和等于(18-17)+(19-18)+(41-38)=5达到最小。
输入输出格式
输入格式:
第一行两个正整数N,K
接下来有N行,第i行表示第i+1个人等级。
[数据规模]
在90%的数据中,1≤N≤3000;
在100%的数据中,1≤N≤100000;
保证所有输入数据中等级的值小于100000000,1≤K≤N-1。
输出格式:
在第一行输出最小的等级差的总和。
输入输出样例
输入样例#1: 复制
7 3
30
17
26
41
19
38
18
输出样例#1: 复制
5
思路:贪心
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,ans;
int num[];
struct nond{
int l,r,dis;
}v[];
bool cmp(nond a,nond b){
return a.dis<b.dis;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&num[i]);
sort(num+,num++n);
for(int i=;i<n;i++){
v[i].l=num[i];
v[i].r=num[i+];
v[i].dis=num[i+]-num[i];
}
sort(v+,v++n-,cmp);
for(int i=;i<=m;i++)
ans+=v[i].dis;
cout<<ans;
}
最新文章
- grub2添加win引导(未试用)
- 【JAVA】JDK -Calendar 遇到的 一个坑
- 说说设计模式~策略模式(Strategy)
- DIV JS CSS 轻量级弹出层 兼容各浏览器
- 苹果开发——App内购以及验证store的收据(二)
- 01-03-02-1【Nhibernate (版本3.3.1.4000) 出入江湖】CRUP操作--cascade 级联相关
- php5.3不支持 ereg、ereg_replace等函数问题,如提示:Deprecated: Function ereg() is deprecated
- spoj 4487. Can you answer these queries VI (gss6) splay 常数优化
- <;Pro .NET MVC4>; 三大工具之依赖注入神器——Ninject
- 尺度空间(Scale space)理论
- Struts2系列笔记(4)---Ation类访问servlet
- linux0.11学习笔记(1)
- vmstat 命令详解
- 分享一个开源的网盘下载工具BaiduPCS-Go
- spring aop学习记录
- 设计模式综合列表【QQ空间日志转载】
- Dom对象和jQuery对象的相互转化
- Centos7安装Nginx实战
- js数组转成对象
- Hadoop学习资料整理
热门文章
- STL使用————SET&;MULTISET
- JS控制光标定位,定位到文本的某个位置
- 123.static静态函数与类模板
- HDU 4349 Xiao Ming&#39;s Hope 组合数学
- 在Windows下如何创建虚拟环境(默认情况下)
- 关于springmvc重定向后Cannot create a session after the response has been committed问题
- tee---将数据重定向到文件,
- 【例题 7-11 UVA - 12325】Zombie&#39;s Treasure Chest
- Android 第三方分享中遇到的问题以及解决方案
- 怎样借助log4j把日志写入数据库中