Description

Taring说:生活的过程就是执行函数的过程。需要命令,也需要回报。更重要的,是得到回报的过程。

好吧。。。这道题其实和上面的也没啥关系TAT,我们要求的是下面的问题:

给定\(n\)个数,第\(i\)个数为\(a[i]\)。再给定一个常数h。现在,你要把这\(n\)个数,分成两个集合,且这两个集合的并集为这\(n\)个数的全集;这两个集合的交集为空集。然后我们对于任意的两个数\(a[i],a[j]\),做一个函数\(f(a[i], a[j])\) ,此函数满足:

若\(a[i]\)和\(a[j]\)在同一个集合,那么\(f(a[i], a[j]) = a[i] + a[j]\);

若a[i]和\(a[j]\)在不同集合,那么\(f(a[i], a[j]) = a[i] + a[j] + h\)

现在Taring要使得所有这些函数的最大值和最小值的差最小,请求出这个最小差。

Input Format

第一行有两个数字,\(n\)和\(h\)。

第二行有n个数字,第i个数据为a[i]。

Output Format

有且只有一个整数,为题目要求所求的最小差。

Sample Input

3 2

1 2 3

Sample Output

1

Constraints

对于30%的数据,\(n \le 1000\)。

对于100%的数据,\(n<=100000,h,a[i]<=10^8\)

这题写了个奇怪的算法。我想肯定有某种分法使得最优解涵盖在里面。

我是这样做的。将\(a\)排序。开始时把所有元素都放入一个集合中,然后把依次\(a[i]\)放入另一个集合中,边放边维护答案就可以了。

如何证明脑补一下就行了吧(大概是让最小值变大)。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
using namespace std; #define maxn (100010)
int N,H,A[maxn],ans; int main()
{
freopen("1333.in","r",stdin);
freopen("1333.out","w",stdout);
scanf("%d%d",&N,&H);
for (int i = 1;i <= N;++i) scanf("%d",A+i);
sort(A+1,A+N+1);
ans = A[N]+A[N-1]-A[1]-A[2];
for (int i = 1;i <= N-2;i += 2)
{
int mi = min(A[1]+A[2]+H,A[i+1]+A[i+2]),ma = max(A[N]+A[N-1],A[N]+A[1]+H);
if (i > 1) ma = max(ma,A[i]+A[i-1]+H),mi = min(mi,A[1]+A[3]);
ans = min(ans,ma-mi);
}
printf("%d",ans);
fclose(stdin); fclose(stdout);
return 0;
}

sjtu1333 函数时代的更多相关文章

  1. requireJS 从概念到实战

    requireJS 可以很轻易的将一个项目中的JavaScript代码分割成若干个模块(module).并且requireJS推荐一个模块就是一个文件,所以,你将获得一些零碎的具有互相依赖关系的JS文 ...

  2. 浏览器事件循环 & nodejs事件循环

    第1篇:如何理解EventLoop——宏任务和微任务篇 宏任务(MacroTask)引入 在 JS 中,大部分的任务都是在主线程上执行,常见的任务有: 渲染事件 用户交互事件 js脚本执行 网络请求. ...

  3. 对javascript EventLoop事件循环机制不一样的理解

    前置知识点: 浏览器原理,浏览器内核5种线程及协作,JS引擎单线程设计推荐阅读: 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理 [FE]浏览器渲染引擎「内核」 js异步编程,Promise ...

  4. HTML5时代的纯前端上传图片预览及严格图片格式验证函数(转载)

    原文地址:http://www.2cto.com/kf/201401/274752.html 一.要解决什么样的问题? 在写这个函数之前,有们童鞋在群里问如何纯前端严格验证图片格式.这在html5时代 ...

  5. 函数计算: 让小程序开发进入 Serverless 时代

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 吴天龙(木吴 ...

  6. 判断系统64位(使用GetNativeSystemInfo函数,XP时代就有这个函数了)

    判断系统64位 static bool IsWin64 (void) { SYSTEM_INFO si = {0}; typedef void (WINAPI *LPFN_PGNSI)(LPSYSTE ...

  7. 07. Web大前端时代之:HTML5+CSS3入门系列~H5 地理位置

    Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 源码:https://github.com/duniti ...

  8. ZeroMQ:云时代极速消息通信库

    ZeroMQ:云时代极速消息通信库(大规模|可扩展|低成本|高效率解决之道,大规模分布式|多线程应用程序|消息传递架构构建利器) [美]Pieter Hintjens(皮特.亨特金斯)著   卢涛 李 ...

  9. 03.Web大前端时代之:HTML5+CSS3入门系列~H5功能元素

    Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 2.功能元素 1.hgroup 对网页或区段(secti ...

随机推荐

  1. 关于Git中的一些常用的命令

    深入了解git的checkout命令 检出命令(git checkout)是Git最常用的命令之一,同时也是一个很危险的命令. 因为这条命令会重写工作区.检出命令的用法如下: 用法一: git che ...

  2. 使用DS18B20设计温控系统

    datasheet真的是得看看啊,比如DS18B20,不然程序都不好写,美国DALLAS半导体公司推出的数字化温度传感器DS18B20采用单总线协议,即与单片机接口仅需要一个IO口,无需任何外部原件, ...

  3. Spring中bean的scope

    Spring容器中的bean具备不同的scope,最开始只有singleton和prototype,但是在2.0之后,又引入了三种类型:request.session和global session,不 ...

  4. 深入解析hasOwnProperty与isPrototypeOf

    这里采用一个实例来说明: function Person(name) { //以下都是Person的OwnProperty this.name = name; this.showMe = functi ...

  5. SSH免密码登录设置

    我们使用ssh-keygen在ServerA上生成private和public密钥,将生成的public密钥拷贝到远程机器ServerB上后,就可以使用ssh命令无需密码登录到另外一台机器Server ...

  6. ASP大数据量使用GetRows()提升速度

    抽取10万条数据,Access数据库,GetRows() 现有10W条数据,Access数据库保存 通过正常提取: <% Set conn= Server.CreateObject(" ...

  7. HTTP和HTTPS详解

    http://blog.csdn.net/mingli198611/article/details/8055261/ 转自:http://www.cnblogs.com/ok-lanyan/archi ...

  8. java星座、年龄、日期等

    星座: public static String getStar(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(dat ...

  9. IOS-UI-UIDynamic(二)

    UIPushBehavior :推动效果 UIAttachmentBehavior:附着效果 UISnapBehavior:迅速移动效果 一.重要的属性 UIPushBehavior :推动效果 ty ...

  10. Objective-C 学习笔记(Day 2)

    ------------------------------------------- 如何根据题目准确完整清晰的声明一个类并实现给定的行为 /*  //下面这个程序教大家如何根据题目去声明一个类,并 ...