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);
}
代码比较抽象,看看就好。
随机推荐
- Vue3.5新增的baseWatch让watch函数和Vue组件彻底分手
前言 在Vue 3.5.0-beta.3版本中新增了一个base watch函数,这个函数用法和我们熟知的watch API一模一样.区别就是我们之前用的watch API是和Vue组件以及生命周期是 ...
- pip 安装包时提示 "WARNING: Skipping xxx due to invalid metadata entry 'name'"
我最近在使用 pip 安装包的时候经常遇到如下警告: WARNING: Skipping /opt/homebrew/lib/python3.11/site-packages/numpy-1.26.3 ...
- ggml 简介
ggml 是一个用 C 和 C++ 编写.专注于 Transformer 架构模型推理的机器学习库.该项目完全开源,处于活跃的开发阶段,开发社区也在不断壮大.ggml 和 PyTorch.Tensor ...
- Python 潮流周刊#67:uv 的重磅更新(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- 全网最适合入门的面向对象编程教程:44 Python内置函数与魔法方法-重写内置类型的魔法方法
全网最适合入门的面向对象编程教程:44 Python 内置函数与魔法方法-重写内置类型的魔法方法 摘要: 在 Python 中,内置类型的行为是通过一组特殊的"魔法方法"来实现的, ...
- vue动态绑定样式
每次点击方块时通过三元表达式,改变对应的class,每一个不同的class对应不同的样式,从而通过改变class实现样式的切换. 实现代码 <template> <div class ...
- 使用 nuxi upgrade 升级现有nuxt项目版本
title: 使用 nuxi upgrade 升级现有nuxt项目版本 date: 2024/9/10 updated: 2024/9/10 author: cmdragon excerpt: 摘要: ...
- time series classification and transfer learning
最近在看几篇最近几年的工作和survey,希望早点能做点东西.
- Go日志管理库zap
一.zap介绍 在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能: 1.能够将事件记录到文件中,而不是应用程序控制台. 2.日志切割-能够根据文件大小.时间或间隔等来切割日志文件. ...
- cortex-m3 m4 异常机制
文章写的很好,待整理 1.[STM32]HardFault问题详细分析及调试笔记 https://blog.csdn.net/m0_54916619/article/details/129979222 ...