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);
}
代码比较抽象,看看就好。
随机推荐
- 猜数游戏[USACO2008] Haybale Guessing G
$ Haybale \ Guessing \ G $ (猜数游戏) 解题报告 \(Diffculty:\) \(\color{purple}省选/NOI-\) 传送门1:(HZOIER) 传送门2:( ...
- Scikit-learn从入门到放弃
目录 Scikit-learn简介 SVM分类 随机森林回归 K-means聚类 前置建议阅读: 1.NumPy从入门到放弃 2.Pandas从入门到放弃 3.SciPy从入门到放弃 Scikit-l ...
- MyBatis 从入门到放弃 ( MyBatis基础总结 )
目录 MyBatis历史 Mybatis特性 MyBatis下载 和其它持久化层技术对比 开发环境 创建maven工程 创建MyBatis的核心配置文件 创建mapper接口 创建MyBatis的映射 ...
- Angular Material 18+ 高级教程 – Material Ripple
介绍 Ripple (波纹) 是 Material Design 中一个标志性的特色. 点击 button 会溅起水波的感觉. 参考 Docs – Ripples When to use it? 一般 ...
- JavaScript Library – YouTube Embedded、YouTube Player API、YouTube Data API
YouTube Embed Video 参考: Embed videos & playlists 它和 Google Maps Embed 类似,是通过 iframe 完成的. <ifr ...
- OAuth2.0授权-gitee授权码模式
OAuth2.0授权验证-gitee授权码模式 本文主要介绍如何笔者自己是如何使用gitee提供的OAuth2.0协议完成授权验证并登录到自己的系统,完整模式如图 1.创建应用 打开gitee个人中心 ...
- Spring —— 注解开发(管理第三方bean)
第三方bean管理 第三方bean依赖注入
- 在Linux 中使用 pidstat 命令监控进程性能
一.安装 pidstat 命令 检查系统是否已经安装了 pidstat 打开终端,输入以下命令检查是否已经安装了 pidstat: pidstat -V 如果显示版本信息,说明已经安装,可以跳过安装步 ...
- MySQL笔记--数据库定时备份与恢复
利用crontab定时.利用mysqldump备份 编写sh启动脚本时记得赋予执行权限(x) 如果没有mysqldump命令执行,基于centos7 yum -y install mysql-clie ...
- foobar2000 v2.1.3 汉化版(更新日期:2024.04.02)
foobar2000 v2.1.3 汉化版 -----------------------[软件截图]---------------------- -----------------------[软件 ...