众所周知,这道题的难度是 1400,所以是简单题。

分析

首先,坚信这是一道简单题,所以不要想复杂了。

首先我们需要对 aaa 数组排序,这点是肯定的,为啥应该不用我解释。

下面,我们假设 p1,  p2,  p3p_1, \;p_2,\; p_3p1​,p2​,p3​ 分别为朋友在第 111 个,第 222 个和第 333 个背包中选择的棍子下标(注意,这里的下标都是指的排序后的数组下标)。我们可以发现,所有的分类情况下一定会满足下列四种条件之一:

{p1<p2<p3p1>p2>p3min⁡(p1,p3)>p2max⁡(p1,p3)>p2\begin{cases}
p_1<p_2<p_3\\
p_1>p_2>p_3\\
\min(p_1,p_3)>p_2\\
\max(p_1,p_3)>p_2\\
\end{cases}⎩⎨⎧​p1​<p2​<p3​p1​>p2​>p3​min(p1​,p3​)>p2​max(p1​,p3​)>p2​​

翻译一下,这四种情况的答案分别是:

ans={(ap2−ap1)+(ap3−ap2)if⁡p1<p2<p3(ap3−ap2)+(ap2−ap1)if⁡p1>p2>p3(ap1−ap2)+(ap3−ap2)if⁡min⁡(p1,p3)>p2(ap2−ap3)+(ap2−ap1)if⁡max⁡(p1,p3)<p2ans=\begin{cases}
(a_{p2}-a_{p1})+(a_{p3}-a_{p2})\operatorname{if} p_1<p_2<p_3\\
(a_{p3}-a_{p2})+(a_{p2}-a_{p1})\operatorname{if} p_1>p_2>p_3\\
(a_{p1}-a_{p2})+(a_{p3} -a_{p2})\operatorname{if}\min(p_1,p_3)>p_2\\
(a_{p2}-a_{p3})+(a_{p2} -a_{p1})\operatorname{if}\max(p_1,p_3)<p_2\\
\end{cases}ans=⎩⎨⎧​(ap2​−ap1​)+(ap3​−ap2​)ifp1​<p2​<p3​(ap3​−ap2​)+(ap2​−ap1​)ifp1​>p2​>p3​(ap1​−ap2​)+(ap3​−ap2​)ifmin(p1​,p3​)>p2​(ap2​−ap3​)+(ap2​−ap1​)ifmax(p1​,p3​)<p2​​

你感性理解一下,你就会发现前两种情况一定不会比后两种优(因为如果出现这两种情况,你只需要将其中两个背包交换一下位置就会转化为后面两种,而明显转化后会更优,这个你自己手模一下应该很显然),于是我们就只用考虑后面两种情况就可以了,即:

ans={(ap1−ap2)+(ap3−ap2)if⁡min⁡(p1,p3)>p2(ap2−ap3)+(ap2−ap1)if⁡max⁡(p1,p3)<p2ans=\begin{cases}
(a_{p1}-a_{p2})+(a_{p3}-a_{p2})\operatorname{if}\min(p_1,p_3)>p_2\\
(a_{p2}-a_{p3})+(a_{p2} -a_{p1})\operatorname{if}\max(p_1,p_3)<p_2\\
\end{cases}ans={(ap1​−ap2​)+(ap3​−ap2​)ifmin(p1​,p3​)>p2​(ap2​−ap3​)+(ap2​−ap1​)ifmax(p1​,p3​)<p2​​

但是你会发现,即使是这样,我们任然不能很好的限制计算方法,于是我们考虑继续加强条件。

下面我们以第三种情况为例加强限制(第四种的推理过程是一样的):

我们假设有 min⁡(p1,  p3)>p2+1\min(p_1,\;p_3) > p_2 + 1min(p1​,p3​)>p2​+1(注意这里的都是下标之间的关系),我们分下列三种情况分析(注意,我们下面的讨论都基于我们假设朋友一定会选 p1,  p2,  p3p_1,\;p_2,\;p_3p1​,p2​,p3​ 的基础上):

  1. 如果 p2+1p_2 + 1p2​+1 这根棍子被放在了第 111 个背包中,那么朋友在背包 1 11 中选择下标为 p2+1p_2 + 1p2​+1 的棍子而不是 p1p_1p1​,因为 ap2+1−ap2⩽ap1−ap2a_{p_2 + 1} - a_{p_2} \leqslant a_{p_1} - a_{p_2}ap2​+1​−ap2​​⩽ap1​​−ap2​​,因此假设不成立;
  2. 如果 p2+1p_2 + 1p2​+1 这根棍子被放在了第 222 个背包中,那么朋友在背包 2 22 中选择下标为 p2+1p_2 + 1p2​+1 的棍子而不是 p2p_2p2​,因为 (ap1−ap2+1)+(ap3−ap2+1)⩽(ap1−ap2)+(ap3−ap2) (a_{p_1} - a_{p_2 + 1}) + (a_{p_3} - a_{p_2 + 1}) \leqslant (a_{p_1} - a_{p_2}) + (a_{p_3} - a_{p_2} )(ap1​​−ap2​+1​)+(ap3​​−ap2​+1​)⩽(ap1​​−ap2​​)+(ap3​​−ap2​​),因此假设不成立;
  3. 如果 p2+1p_2 + 1p2​+1 这根棍子被放在了第 333 个背包中,那么朋友在背包 3 33 中选择下标为 p2+1p_2 + 1p2​+1 的棍子而不是 p3p_3p3​,因为 ap2+1−ap2⩽ap3−ap2a_{p_2 + 1} - a_{p_2} \leqslant a_{p_3} - a_{p_2}ap2​+1​−ap2​​⩽ap3​​−ap2​​,因此假设不成立。

于是我们发现,在 min⁡(p1,  p3)>p2+1\min(p_1,\;p_3) > p_2 + 1min(p1​,p3​)>p2​+1 时,朋友一定不会选择我们给他“指定”的那三个棍子,于是我们把条件收束为:

ans={min⁡(p1,p3)>p2&min⁡(p1,p3)=p2+1max⁡(p1,p3)<p2&max⁡(p1,p3)=p2−1ans=\begin{cases}
\min(p_1,p_3)>p_2 \& \min(p_1,p_3)=p_2+1\\
\max(p_1,p_3)<p_2 \& \max(p_1,p_3)=p_2-1\\
\end{cases}ans={min(p1​,p3​)>p2​&min(p1​,p3​)=p2​+1max(p1​,p3​)<p2​&max(p1​,p3​)=p2​−1​

的时候我们才能确定朋友所选取的棍子就是我们“指定”的那三根。

这个条件化简一下其实就是:

ans={min⁡(p1,p3)=p2+1max⁡(p1,p3)=p2−1ans=\begin{cases}
\min(p_1,p_3)=p_2+1\\
\max(p_1,p_3)=p_2-1\\
\end{cases}ans={min(p1​,p3​)=p2​+1max(p1​,p3​)=p2​−1​

而我们需要最大化 ∣ap2−ap1∣+∣ap3−ap2∣|a_{p_2}-a_{p_1}|+|a_{p_3} - a_{p_2}|∣ap2​​−ap1​​∣+∣ap3​​−ap2​​∣,于是我们很显然将 min⁡(p1,  p3)\min(p_1,\;p_3)min(p1​,p3​) 定为 111 或者让 max⁡(p1,  p3)\max(p_1,\;p_3)max(p1​,p3​) 为 nnn,这样我们得到的解一定最优(注意此时我们是在计算答案,这里的 min 和 max 与上式中并不表同一含义,具体看下面的式子)。但是此时我们也只是确定了其中一边的取值,那么另一边枚举就行了,于是我们有以下计算式:

ans=max⁡{max⁡i=3n{(ai−a1)+(ai−ai−1)}此时的排列是1,i n,2 i-1max⁡i=3n−2{(an−ai)+(ai+1−ai)}此时的排列是n,1 i,i+1 n-1ans=\max\begin{cases}
\max^n_{i=3}\{(a_i-a_1)+(a_i-a_{i-1})\}\text{此时的排列是1,i~n,2~i-1} \\
\max^{n-2}_{i=3}\{(a_n-a_i)+(a_{i+1}-a_{i})\}\text{此时的排列是n,1~i,i+1~n-1} \\
\end{cases}ans=max{maxi=3n​{(ai​−a1​)+(ai​−ai−1​)}此时的排列是1,i n,2 i-1maxi=3n−2​{(an​−ai​)+(ai+1​−ai​)}此时的排列是n,1 i,i+1 n-1​

于是我们就做完了,对就是这么简单,区区 1400 而已,是真的不能把他想的太难了,不然真的很容易想偏。

附源码:

#include<bits/stdc++.h>
using namespace std;
int t;
int a[10000];
int main(){
cin>>t;
while(t--){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
int ans=0;
for(int i=3;i<=n;i++){
ans=max(ans,a[i]-a[1]+a[i]-a[i-1]);//1,i~n,2~i-1
}
for(int i=1;i<=n-2;i++){
ans=max(ans,a[n]-a[i]+a[i+1]-a[i]);//n,1~i,i+1~n-1
}
printf("%d\n", ans);
}
return 0;
}

CF1740C题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. 独“数”一帜 双证加冕!TeleDB亮相可信数据库发展大会

    近日,2024可信数据库发展大会在北京召开,主题为"自主.创新.引领".大会重磅发布多项中国信通院及中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)在数据库领域最 ...

  2. 使用VS2022打开解决方案后每个项目都显示“不兼容”

    1.问题描述 今天本地使用VS2022打开之前新建的项目(.Net6框架),突然出现每个项目都显示"不兼容"的问题,导致每个项目的文件都看不到了,如下图所示: 2.解决办法 鼠标右 ...

  3. .Net Core报“‘GB2312‘ is not a supported encoding name. For information on defining a custom encod”的错误

    1.问题描述 在.Net Core中使用Encoding.GetEncoding("GB2312")报如下错误: System.ArgumentException:"'G ...

  4. Jenkins Job中衍生进程存活难题及解决方案

    Jenkins Job中衍生进程存活难题及解决方案 场景介绍 在Jenkins中创建了一个Job,假设你在一系列Build Step之前或之后启动了一个进程,例如启动一个Jboss进程.在Build完 ...

  5. 耳分解、双极定向和 P9394 Solution

    耳分解 设无向图 \(G'(V',E')\subset G(V,E)\),简单路径或简单环 \(P:x_1\to \dots \to x_k\) 被称为 \(G\) 关于 \(G'\) 的耳,当且仅当 ...

  6. NOIp 2024 考试策略

    无论简不简单,都要在前 30min 浏览所有题面,思考哪题可做.哪题不可做,思考能打哪些部分分,9:00 再开始写 T1. 题目简单时 9:00 开写后,30min 以内切完 T1. 9:30 开 T ...

  7. 正则表达式匹配邮箱,IP地址,URL

    参考链接: http://urlregex.com/ 1. 邮箱匹配正则表达式 C# ^(?(")(".+?(?<!\\)"@)|(([0-9a-z]((\.(?! ...

  8. 聊聊 FocusSearch/focus_mcp_sql:Text2SQL 的新玩法

    最近在 GitHub 上逛的时候,发现了一个挺有意思的项目--FocusSearch/focus_mcp_sql.作为一个对 Text2SQL 有点小研究的前端码农,我忍不住想和大家聊聊这个工具.它不 ...

  9. DeepSeek 不太稳定?那就搭建自己的 DeepSeek 服务

    概述 DeepSeek-R1 发布 DeepSeek 在 2025 年给我们送来一份惊喜,1 月 20 号正式发布第一代推理大模型 DeepSeek-R1.这个模型在数学推理.代码生成和复杂问题解决等 ...

  10. 晶振测试仪GDS-80系列参数

    晶振测试仪GDS-80系列 一.产品简介 晶振测试仪GDS-80系列是高性价比的晶振测试系统,采用网络分析技术,实现智能化测量,符合IEC-444标准.测量频率范围10KHz-200KHz,1MHz- ...