DZY的根(思维水)

DZY的根
【问题描述】
DZY是个没有根的人,他十分想要有根,这样才能。。。智商爆表的计算机大神WJC决定再帮帮他,他用程序制造了N个根——有生命的根!
这N个根和WJC一样都十分机智,他们要参加国际象棋比赛,该比赛要进行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
【来源】
由 Hacker_WJC 改编于某个OJ上的某道题(23333333333333333)

题解:每个根最多参加两场对弈,最少参加零场对弈,其实就是代表赢一次必定会输一次,也就是排序中相邻的两个数的差和最小;

代码:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int INF=0x3f3f3f3f;
#define SI(x) scanf("%d",&x)
#define SL(x) scanf("%lld",&x)
#define PI(x) printf("%d",x)
#define PL(x) printf("%lld",x)
#define mem(x,y) memset(x,y,sizeof(x))
#define P_ printf(" ")
typedef long long LL;
const int MAXN=100010;
int m[MAXN],n[MAXN];
int main(){
	int N,K;
	while(~scanf("%d%d",&N,&K)){
		for(int i=0;i<N;i++){
			SI(m[i]);
		}
		sort(m,m+N);
		int tp=0;
		for(int i=1;i<N;i++){
			n[tp]=m[i]-m[i-1];
			tp++;
		}
		sort(n,n+tp);
		int ans=0;
		for(int i=0;i<K;i++)
			ans+=n[i];
		printf("%d\n",ans);
	}
	return 0;
}

  

时间: 2024-10-25 23:57:43

DZY的根(思维水)的相关文章

HDOJ/HDU 1256 画8(绞下思维~水题)

Problem Description 谁画8画的好,画的快,今后就发的快,学业发达,事业发达,祝大家发,发,发. Input 输入的第一行为一个整数N,表示后面有N组数据. 每组数据中有一个字符和一个整数,字符表示画笔,整数(>=5)表示高度. Output 画横线总是一个字符粗,竖线随着总高度每增长6而增加1个字符宽.当总高度从5增加到6时,其竖线宽度从1增长到2.下圈高度不小于上圈高度,但应尽量接近上圈高度,且下圈的内径呈正方形. 每画一个"8"应空一行,但最前和最后都无空

CodeForces 604C 【思维水题】`

题意: 给你01字符串的长度再给你一个串. 然后你可以在这个串中选择一个起点和一个终点使得这个连续区间内所有的位取反. 求: 经过处理后最多会得到多少次01变换. 例如:0101是4次,0001是2次,000110是3次. 分析: 区间内部的数目是不会发生变化的,因为每一位都是按位取反,相当于都没变,唯一发生变化的是区间边缘,所以考虑到连续的两个或多个1或者0的时候在其中某处设置断点会使得变换次数增加,很容易理解当某处有两个连续点的时候变换次数增加1,因为一个区间只有两个端点所以变换次数最多增加

Iroha and a Grid AtCoder - 1974(思维水题)

就是一个组合数水题 偷个图 去掉阴影部分  把整个图看成上下两个矩形 对于上面的矩形求出起点到每个绿点的方案 对于下面的矩形 求出每个绿点到终点的方案 上下两个绿点的方案相乘后相加 就是了 想想为什么 #include <iostream> #include <cstdio> #include <sstream> #include <cstring> #include <map> #include <cctype> #include

【Gym - 100923A】Por Costel and Azerah(思维水题)

Por Costel and Azerah Descriptions 给你n个数 问你,有多少个子序列 的和是偶数 Example Input 233 10 124 2 Output 33 题目链接 https://vjudge.net/problem/Gym-100923A 恶心死了   freopen("azerah.in","r",stdin); freopen("azerah.out","w",stdout); 必须加

codeforces 804A Find Amir 思维/水题

A few years ago Sajjad left his school and register to another one due to security reasons. Now he wishes to find Amir, one of his schoolmates and good friends. There are n schools numerated from 1 to n. One can travel between each pair of them, to d

neu 1492 Segment Balls(思维 水)

http://acm.neu.edu.cn/hustoj/problem.php?id=1492 题意: 有n个盒子 现在有两种操作: 1 在序号为x的倍数的盒子里放y个球 2 查询序号x到y的盒子里的球的总数 思路: 当时以为线段数 而且没看明白 number is multiple of B 就放弃了 其实 题目中给出 1 <= B ,C <= 10 已经暗示了这题不需要线段树 只需要在操作1 时 a[x]+=y; 再通过 (y/i-(x-1)/i)*a[i]  来计算总量 过了时间竟然不

思维水题 poj1852

题目链接:http://poj.org/problem?id=1852 题意:木板长为n,    蚂蚁数量为k,    后面k个数,依次代表蚂蚁的位置,  当蚂蚁到达边界的时候会立马掉下,当两个蚂蚁相碰面的时候,两蚂蚁各种反向走.(蚂蚁走的方向不定,但秒速度为1)   求所有蚂蚁都掉下来的最早时间和最晚时间. 思路:最早时间很容易求,就不多说了. 对于最晚时间,    对于两个蚂蚁相碰面,两个蚂蚁各自反向走,在这里可以看成两个蚂蚁方向都不变,沿着相同方向继续行走,得到的效果是一样的. AC代码:

编程语言:变革创业思维的工具

导语:曾在谷歌7年,目前加入Dropbox的编程语言设计师表示,当软件公司达到一定规模之后,避免混乱的唯一方式是使用对程序员有更多要求的编程语言. 近日,<麻省理工科技评论>本周刊文称,编程语言塑造了用户的思维方式.这也可以反映科技行业创业公司的策略,以及他们为何有能力实现自我变革. 以下为文章全文: 作 为Twitter.Hulu和许多当代互联网服务的开发语言,Ruby备受关注.而当日本计算机科学家松本行宏决定设计这一语言时,他借鉴了萨莫埃尔·德 拉尼(Samuel R. Delany)19

【感悟】关于需求的一点感想

看了张图,是关于吐槽改需求的,改需求虽是程序员所不喜,但我觉得需求对于程序员却是必不可缺的. 特别是我们刚入门自学的,需求对于我们来说就更重要了. 每学到一点东西,我觉得都要自己找需求去运用 这不仅可以锻炼写代码的能力,也可以锻炼思维 水汐音 2017.09.04