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)|\)。

\[|(A+D)-(B+C)|=|A-B+D-C|
\]
\[|(A+C)-(B+D)|=|A-B+C-D|
\]

设 \(T=A-B\)。

有 \(T<0\)。

所以,

\[|A-B+D-C|=|T+(D-C)|
\]
\[|A-B+C-D|=|T+(C-D)|
\]

由于 \(|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);
}

代码比较抽象,看看就好。

随机推荐

  1. Vue3.5新增的baseWatch让watch函数和Vue组件彻底分手

    前言 在Vue 3.5.0-beta.3版本中新增了一个base watch函数,这个函数用法和我们熟知的watch API一模一样.区别就是我们之前用的watch API是和Vue组件以及生命周期是 ...

  2. pip 安装包时提示 "WARNING: Skipping xxx due to invalid metadata entry 'name'"

    我最近在使用 pip 安装包的时候经常遇到如下警告: WARNING: Skipping /opt/homebrew/lib/python3.11/site-packages/numpy-1.26.3 ...

  3. ggml 简介

    ggml 是一个用 C 和 C++ 编写.专注于 Transformer 架构模型推理的机器学习库.该项目完全开源,处于活跃的开发阶段,开发社区也在不断壮大.ggml 和 PyTorch.Tensor ...

  4. Python 潮流周刊#67:uv 的重磅更新(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  5. 全网最适合入门的面向对象编程教程:44 Python内置函数与魔法方法-重写内置类型的魔法方法

    全网最适合入门的面向对象编程教程:44 Python 内置函数与魔法方法-重写内置类型的魔法方法 摘要: 在 Python 中,内置类型的行为是通过一组特殊的"魔法方法"来实现的, ...

  6. vue动态绑定样式

    每次点击方块时通过三元表达式,改变对应的class,每一个不同的class对应不同的样式,从而通过改变class实现样式的切换. 实现代码 <template> <div class ...

  7. 使用 nuxi upgrade 升级现有nuxt项目版本

    title: 使用 nuxi upgrade 升级现有nuxt项目版本 date: 2024/9/10 updated: 2024/9/10 author: cmdragon excerpt: 摘要: ...

  8. time series classification and transfer learning

    最近在看几篇最近几年的工作和survey,希望早点能做点东西.

  9. Go日志管理库zap

    一.zap介绍 在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能: 1.能够将事件记录到文件中,而不是应用程序控制台. 2.日志切割-能够根据文件大小.时间或间隔等来切割日志文件. ...

  10. cortex-m3 m4 异常机制

    文章写的很好,待整理 1.[STM32]HardFault问题详细分析及调试笔记 https://blog.csdn.net/m0_54916619/article/details/129979222 ...