ARC121D 1 or 2
ARC121D 1 or 2
诈骗题。
思路
吃一个糖的操作可以看做是和一个 \(a_i\) 为 0 的糖一起吃。
可以枚举有多少个糖单独吃来确定要增加多少个 0。
问题变为每次吃两颗糖。
根据人类直觉,有一个贪心,最小的糖和最大的糖一起吃最优,次小的糖和次大的糖一起吃最优,依次类推。
怎么证明这个性质呢?
有 2 个理解方法:
感性理解:
使最大值最小,那么最大的数肯定加上最小的数最优;最小值最大,那么最小的数加上最大的数最优;应该可以理解以上结论。
理性理解:
有 \(A<B<C<D\)。
可以选 \(A+D,B+C\),同时也可以选 \(A+C,B+D\)。(\(A+B,C+D\) 肯定不优,故不考虑)
有 \(|(A+D)-(B+C)|\) 和 \(|(A+C)-(B+D)|\)。
\]
\]
设 \(T=A-B\)。
有 \(T<0\)。
所以,
\]
\]
由于 \(|D-C|=|C-D|\),且 \(D-C>0\),\(C-D<0\)。
结合 \(T<0\),有 \(|T+(C-D)|>|T+(D-C)|\)。
排序后 将 0 加入 \(a\) 数组,然后塞到队列里就 OK,每次取队头队尾。
CODE
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll maxn=6e3;
ll n;
ll ans;
ll a[maxn];
deque<ll>que;
int main()
{
scanf("%lld",&n);
for(ll i=1;i<=n;i++) scanf("%lld",&a[i]);
sort(a+1,a+n+1);
ans=1e18;
for(ll k=0;k<=n;k++)
{
ll tmp=k,has=n+k;
ll mx=-1e18,mi=1e18;
for(ll i=1;i<=n;i++)
{
if(a[i]>0)
while(tmp) que.push_back(0),tmp--;
que.push_back(a[i]);
}
while(tmp) que.push_back(0),tmp--;
while(has>1)
{
has-=2;
ll v=que.front()+que.back();
que.pop_front();
que.pop_back();
mx=max(v,mx);
mi=min(v,mi);
}
if(has) mi=min(mi,que.front()),mx=max(mx,que.front()),que.pop_back();
ans=min(ans,mx-mi);
}
printf("%lld",ans);
}
代码比较抽象,看看就好。
随机推荐
- Python中的分布式框架Ray的安装与使用
技术背景 假设我们在一个局域网内有多台工作站(不是服务器),那么有没有一个简单的方案可以实现一个小集群,提交分布式的任务呢?Ray为我们提供了一个很好的解决方案,允许你通过conda和Python灵活 ...
- Go 匿名字段介绍
在 Go 语言中,结构体(struct)是一种用于将多个不同类型的数据组合在一起的数据结构.你提到的语法: type RiderNode struct { service.SimpleService ...
- 【Python + yaml】之yaml文件数据驱动(包括DDT驱动)
写自动化测试代码中,数据驱动传递参数比较方便一些,也便于后期维护,下面介绍两种数据驱动: 下面是test.yaml文件: start_HRApp: ip: 127.0.0.1 port: 4723 i ...
- Kali初次使用,如何获得root权限?【转】
最新的kali 系统,安装的时候会创建一个新用户,不是root的,然后安装软件的时候会要求root权限,要启用root账号可以按下面这个写的 方法1已经确认可以.方法2没尝试,自己试试吧. 1.确定用 ...
- 【YashanDB知识库】数据变化率超过阈值统计信息失效
[问题分类]性能优化 [关键字]统计信息 [问题描述] SQL --创建表结构 drop table t1; create table t1 (id int,name varchar2(200)); ...
- RGB、HSV和HSL颜色空间
这个文章写的很清楚了 https://zhuanlan.zhihu.com/p/67930839
- C#自定义控件—旋转按钮
C#用户控件之旋转按钮 按钮功能:手自动旋转,标签文本显示.点击二次弹框确认(源码在最后边): [制作方法] 用方法找到控件的中心坐标,画背景外环.内圆:再绘制矩形开关,进行角度旋转即可获得: [关键 ...
- Node.js开发博客项目笔记-http请求处理(1)
处理get与post请求示例代码: const http = require('http'); const querystring = require('querystring'); const se ...
- Angular 16+ 高级教程 – Angular 和其它技术方案的比较
前言 上一篇我有提到 Angular 适合用于哪些项目,但讲的太含糊,什么大中小项目的...这篇我将更具体的去讲解,Angular 的定位,还有它和其它方案的优缺点. Web 技术可以用来做许许多多不 ...
- Angular 18+ 高级教程 – 关于本教程
版本声明 本教程写于 Angular v17,但往后的所有新功能,API 都有更新到相关文章里头,所以教程总是最新的,大家可以安心学习. 前言 光阴飞逝,一转眼,我尽然已经有两年多的时间完全没有接触 ...