题意概述

给定一个长度为 \(n\) 的数列 \(\{a_i\}_{i=1}^n\),将 \(a_i\) 改为 \(b\) 所需的代价是 \((a_i-b)^2\)。求使得 \(\max\{a_i\}-\min\{a_i\}\le17\) 所需的最小代价。

解题思路

看到平方,我第一时间想到的就是三分。

如果不会三分法,右转 OI Wiki 学一学。

设要将数列的所有元素修改到 \([x,x+17]\) 区间内,问题转换为 \(x\) 在某个取值下总代价最小,求这个最小总代价。

于是有 \(x\in [\min\{a_i\},\max\{a_i\}-17]\),因为若 \([x,x+17]\) 的范围超出了数列的取值范围,则一定不会更优。

对于一个元素 \(a_i\) 所需的代价为:

\[cost_i=
\begin{cases}
(a_i - x)^2&(a_i<x),\\
0&(x\leq a_i\leq x + 17),\\
(a_i - x - 17)^2&(a_i>x + 17).
\end{cases}
\]

以 \(x\) 为自变量画出 \(cost_i\) 的图像,长这个样子:

很显然,这是一个单谷函数。

而总代价即为:

\[\sum_{i = 1}^{n}cost_i
\]

单谷函数的和还是单谷函数,可以直接使用三分法求最小代价。时间复杂度 \(O(n\log n)\),32ms 跑得飞起。

Code

#include <iostream>
using namespace std;
const int N=1000;
const int INF=0x3f3f3f3f;
int a[N],n;
int f(int x) // 计算区间取[x,x+17]时总代价
{
int s=0;
for(int i=0;i<n;++i)
{
if(a[i]<x) s+=(x-a[i])*(x-a[i]);
else if(a[i]>x+17) s+=(a[i]-x-17)*(a[i]-x-17);
}
return s;
}
int main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int l=INF,r=-INF,m1,m2;
cin>>n;
for(int i=0;i<n;++i)
{
cin>>a[i];
l=min(l,a[i]);
r=max(r,a[i]);
}
r-=17;
while(l<r) // 三分
{
m1=(l+r>>1),m2=m1+1;
if(f(m1)<f(m2)) r=m2-1;
else l=m1+1;
}
cout<<f(l);
return 0;
}

Update 2025.2.11:笔误,单峰函数 \(\to\) 单谷函数

Update 2025.6.15:更换图片,更改图片与文字间距。

Update 2025.6.16:修改部分公式格式。

洛谷 P3650 [USACO1.3] 滑雪课程设计 Ski Course Design 题解的更多相关文章

  1. 洛谷 P3650 [USACO1.3]滑雪课程设计Ski Course Design

    P3650 [USACO1.3]滑雪课程设计Ski Course Design 题目描述 农民约翰的农场里有N座山峰(1<=N<=1000),每座山都有一个在0到100之间的整数的海拔高度 ...

  2. USACO 1.3.6 Ski Course Design[滑雪课程设计]

    先说说思路: 这题比上一道坑人的wormholes简单多了!我一看到这题,“XXX设计”,还以为要用到什么dp呢,没想到是水题 用两层循环,第一层循环相差17中的上界,第二层遍历所有的山峰计算答案.并 ...

  3. 洛谷P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib 使用四种算法

    洛谷P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib 水题一道…… 题目描述 农民约翰的母牛总是产生最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们. ...

  4. 【洛谷P2584】【ZJOI2006】GameZ游戏排名系统题解

    [洛谷P2584][ZJOI2006]GameZ游戏排名系统题解 题目链接 题意: GameZ为他们最新推出的游戏开通了一个网站.世界各地的玩家都可以将自己的游戏得分上传到网站上.这样就可以看到自己在 ...

  5. 洛谷P1214 [USACO1.4]等差数列 Arithmetic Progressions

    P1214 [USACO1.4]等差数列 Arithmetic Progressions• o 156通过o 463提交• 题目提供者该用户不存在• 标签USACO• 难度普及+/提高 提交 讨论 题 ...

  6. 洛谷4525 & 4526:【模板】自适应辛普森法——题解

    参考:https://phqghume.github.io/2018/05/19/%E8%87%AA%E9%80%82%E5%BA%94%E8%BE%9B%E6%99%AE%E6%A3%AE%E6%B ...

  7. 洛谷1387 二维dp 不是特别简略的题解 智商题

    洛谷1387 dp题目,刚开始写的时候使用了前缀和加搜索,复杂度大概在O(n ^ 3)级别,感觉这么写还是比较对得起普及/提高-的难度的..后来看了题解区各位大神的题解,开始一脸mb,之后备受启发. ...

  8. 洛谷P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib

    P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib 284通过 425提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 超时怎么办? ...

  9. 洛谷P1215 [USACO1.4]母亲的牛奶 Mother's Milk

    P1215 [USACO1.4]母亲的牛奶 Mother's Milk 217通过 348提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 ...

  10. 洛谷P1211 [USACO1.3]牛式 Prime Cryptarithm

    P1211 [USACO1.3]牛式 Prime Cryptarithm 187通过 234提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 题面错误 题目描述 ...

随机推荐

  1. Visual Studio 17.3

    Visual Studio 2022 17.3新UI

  2. elasticsearch RestHighLevelClient 关于document的常用操作 ---------- 新增篇

    es中的新增操作分类两大类:普通新增和批量新增 普通新增使用IndexRequest即可 批量新增使用BulkRequest通过循环的方式将数据进行统一装载最后执行bulk操作 普通新增: //es单 ...

  3. 【目录】【中文】【deplearning.ai】【吴恩达课后作业目录】

    [目录][吴恩达课后作业目录] 吴恩达深度学习相关资源下载地址(蓝奏云) 课程 周数 名称 类型 语言 地址 课程1 - 神经网络和深度学习 第1周 深度学习简介 测验 中英 传送门 无编程作业 编程 ...

  4. HTML显示不出来图片原因及解决办法

    HTML插入图片时,一直显示不出来图片,大体分为两种情况. 一.写了代码,也有图片的空间,但就是没有图片. 二.有图片位置,也有图片框框,但图片就是不显示. 针对图一,应该是路径问题,尽量不要有汉字, ...

  5. ​微软 AI Agent三剑客:AutoGen、Semantic Kernel与MEAI的协同演进

    引言 微软正在积极构建其人工智能(AI)开发者生态系统,旨在为开发者提供从实验研究到生产部署的全方位支持.在这一宏大蓝图中,AutoGen.Semantic Kernel (SK) 和 Microso ...

  6. k8s servicemonitor 采集超时配置

    背景说明 我们有时候在编写exporter时,其中某个采集的metrics接口获取数据很慢,可能需要达到10-20S,基于此种情况,如果我们按照ServiceMonitor默认的配置进行,这里默认sc ...

  7. Python 潮流周刊#106:PEP-734 正式接纳,多解释器时代来临(摘要)

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

  8. 彻底禁用Windows更新与安全中心【小白友好】

    首先我们需要临时关闭安全中心 1.选择开始图标,点击"设置". 2.找到隐私和安全性后,进入"Windows安全中心" 3.点击开启Windows安全中心. 4 ...

  9. apche服务器下无后缀文件配置浏览器访问自动下载

    1.在配置最新的IOS app 微信授权登录时 SDK时,碰到一个问题.服务器端需要配置IOS唤起微信APP授权的通用链接地址. 2.关于通用链接 3. 必须将ios的配置文件放入网址根目录下的app ...

  10. VS2019 添加时没有区域(Areas) 通用-MVC 下也没有域

    https://www.cnblogs.com/shijiehaiyang/p/13035250.html VS2019 似乎和之前版本不同,想要直接添加区域时,发现没有这一个选择1.按网上所提供意见 ...