对于大小为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. keepalived 安装和配置解析

    Keepalived的特性     配置文件简单:配置文件比较简单,可通过简单配置实现高可用功能     稳定性强:keepalived是一个类似于layer3, 4 & 7交换机制的软件,具 ...

  2. 关于VS中的无法解析的外部符号问题

    利用caffe的源码编译出的caffe.lib静态链接库里面就包含了源码里面的那些函数的接口i,所以如果在程序中使用的是源码的话,就不需要在链接器里面再添加此静态链接库了 对于无法解析的外部符号,首先 ...

  3. Java初步学习——2021.10.09每日总结,第五周周六

    (1)今天做了什么: (2)明天准备做什么? (3)遇到的问题,如何解决? 今天学习了菜鸟教程实例部分 一.字符串 1.字符串比较--compareTo方法 public class Main { p ...

  4. 【MySQL】MySQL(三)存储过程和函数、触发器、事务

    MySQL存储过程和函数 存储过程和函数的概念 存储过程和函数是 事先经过编译并存储在数据库中的一段 SQL 语句的集合 存储过程和函数的好处 存储过程和函数可以重复使用,减轻开发人员的工作量.类似于 ...

  5. HTTP状态码 详细解析汇总

    一.状态码的类别: 类别 原因短语1XX Informational(信息性状态码) 接受的请求正在处理2XX Success(成功状态码) 请求正常处理完毕3XX Redirection(重定向状态 ...

  6. 【UE4 C++ 基础知识】<13> 多线程——TaskGraph

    概述 TaskGraph 系统是UE4一套抽象的异步任务处理系统 TaskGraph 可以看作一种"基于任务的并行编程"设计思想下的实现 通过TaskGraph ,可以创建任意多线 ...

  7. [no_code][Alpha]事后分析

    $( "#cnblogs_post_body" ).catalog() 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们要解决的 ...

  8. (六)、Docker 之 Dockerfile

    1.什么是Dockerfile Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 2.Dockerfile解析过程 前提认知: 每条保留字指令都必须为大写字母 ...

  9. Spring Cloud Gateway夺命连环10问?

    大家好,我是不才陈某~ 最近有很多小伙伴私信我催更 <Spring Cloud 进阶>,陈某也总结了一下,最终原因就是陈某之前力求一篇文章将一个组件重要知识点讲透,这样导致了文章篇幅很长, ...

  10. PSS--待看

    转载:浅谈可移植激励规范(PSS)复用策略_路科验证-CSDN博客 译者按 :当今硬件设计变得愈加复杂,如何创建出足够的测试来保证设计的正确性是每个硬件工程师需要面对的问题.Accellera的可移植 ...