对于大小为1的集合,我们可以在其中加入0

因此,枚举0的个数,那么问题即可以看作要求每一个集合大小为2

(特别的,我们允许存在$\{0,0\}$,因为这样删除这两个0显然只会减小极差)

显然此时贪心将最小与最大、次小与次大……放入一个集合中即可

关于正确性,设最小值和最大值为$A,D$,若$\{A,D\}$则继续归纳即可,否则若$\{A,B\}$和$\{C,D\}$,那么有
$$
\begin{cases}\min(A+D,B+C)\ge \min(A+B,C+D)\\\max(A+D,B+C)\le \max(A+B,C+D)\end{cases}
$$
(关于这两个式子,左边的每一项都存在右边的一项小于等于或大于等于其)

因此不妨改为$\{A,D\}$和$\{B,C\}$,显然只会减小极差

具体实现可以先排序,再按照正负分开并加入0即可

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 5005
4 vector<int>vn,vp;
5 int n,mx,mn,ans,a[N];
6 void add(int x){
7 mx=max(mx,x);
8 mn=min(mn,x);
9 }
10 int main(){
11 scanf("%d",&n);
12 for(int i=1;i<=n;i++)scanf("%d",&a[i]);
13 sort(a+1,a+n+1);
14 for(int i=1;i<=n;i++)
15 if (a[i]<=0)vn.push_back(a[i]);
16 for(int i=n;i;i--)
17 if (a[i]>0)vp.push_back(a[i]);
18 if (n&1)vn.push_back(0);
19 ans=2e9;
20 for(int i=(n&1);i<=n;i+=2,vn.push_back(0),vn.push_back(0)){
21 mx=-2e9,mn=2e9;
22 if (vn.size()<vp.size()){
23 for(int j=0;j<vn.size();j++)add(vn[j]+vp[j]);
24 for(int j=0;j<(vp.size()-vn.size())/2;j++)add(vp[vn.size()+j]+vp[vp.size()-j-1]);
25 }
26 else{
27 for(int j=0;j<vp.size();j++)add(vn[j]+vp[j]);
28 for(int j=0;j<(vn.size()-vp.size())/2;j++)add(vn[vp.size()+j]+vn[vn.size()-j-1]);
29 }
30 ans=min(ans,mx-mn);
31 }
32 printf("%d",ans);
33 }

[atARC121D]1 or 2的更多相关文章

随机推荐

  1. Python技法-序列拆分

    Python中的任何序列(可迭代的对象)都可以通过赋值操作进行拆分,包括但不限于元组.列表.字符串.文件.迭代器.生成器等. 元组拆分 元组拆分是最为常见的一种拆分,示例如下: p = (4, 5) ...

  2. .Net Core with 微服务 - 使用 AgileDT 快速实现基于可靠消息的分布式事务

    前面对于分布式事务也讲了好几篇了(可靠消息最终一致性 分布式事务 - TCC 分布式事务 - 2PC.3PC),但是还没有实战过.那么本篇我们就来演示下如何在 .NET 环境下实现一个基于可靠消息的分 ...

  3. 调试器地址出现大小端紊乱,引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。

    今天在编写一系列新增需求代码后,开始调试代码 发现上个版本正常可运行的代码出现了:引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突. 上个版本数代码 ...

  4. 【Ubuntu】VirtualBox 您没有查看“sf_VirtualDisk”的内容所需的权限

    ​ 但是现在发现无法去访问,没有权限: ​ 即使是: crifan@crifan-Ubuntu:~$ sudo chown -R crifan /media/sf_win7_to_ubuntu/ cr ...

  5. 洛谷2149 Elaxia的路线(dp+最短路)

    QwQ好久没更新博客了,颓废了好久啊,来补一点东西 题目大意 给定两个点对,求两对点间最短路的最长公共路径. 其中\(n,m\le 10^5\) 比较简单吧 就是跑四遍最短路,然后把最短路上的边拿出来 ...

  6. 初学python-day4 字典(已更新完)

  7. cookie和session和localStorage的区别

    这三个都是保存在浏览器端,而且都是同源的. Session仅在当前浏览器窗口关闭有效,不能持久保存 Localstorage始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据 Cookie只在设置 ...

  8. Go语言核心36讲(Go语言进阶技术六)--学习笔记

    12 | 使用函数的正确姿势 在前几期文章中,我们分了几次,把 Go 语言自身提供的,所有集合类的数据类型都讲了一遍,额外还讲了标准库的container包中的几个类型. 在几乎所有主流的编程语言中, ...

  9. 论文解读丨表格识别模型TableMaster

    摘要:在此解决方案中把表格识别分成了四个部分:表格结构序列识别.文字检测.文字识别.单元格和文字框对齐.其中表格结构序列识别用到的模型是基于Master修改的,文字检测模型用到的是PSENet,文字识 ...

  10. Unity 3D手游对不同分辨率屏幕的UI自适应

    目前安卓手机的屏幕大小各异,没有统一的标准,因此用Unity 3D制作的手游需要做好对不同分辨率屏幕的UI自适应,否则就会出现UI大小不一和位置错位等问题. 我们的项目在开发时的参照分辨率(Refer ...