凸包——G - Highest Ratio

G - Highest Ratio

来源:AtCoder Beginner Contest 341-G

题目描述:

给定长度为 N N N 的序列 A = ( A 1 , A 2 , … , A N ) A = (A_1, A_2, \ldots, A_N) A=(A1,A2,,AN)

对于每个 k = 1 , 2 , … , N k = 1, 2, \ldots, N k=1,2,,N,解决以下问题:

选择整数 r r r,使得序列 A A A 的第 k k k 到第 r r r 项的平均值最大化,并满足 k ≤ r ≤ N k \leq r \leq N krN

这里,序列 A A A 的第 k k k 到第 r r r 项的平均值定义为:

1 r − k + 1 ∑ i = k r A i \frac{1}{r - k + 1} \sum_{i=k}^{r} A_i rk+11i=krAi

约束条件:

  • 1 ≤ N ≤ 2 × 1 0 5 1 \leq N \leq 2 \times 10^5 1N2×105
  • 1 ≤ A i ≤ 1 0 6 1 \leq A_i \leq 10^6 1Ai106
  • 所有输入值都是整数。

Output:

输出格式:

  • 打印 N N N 行。
  • i i i 行( 1 ≤ i ≤ N 1 \leq i \leq N 1iN)应包含当 k = i k = i k=i 时问题的答案。
  • 您的输出将被视为正确,如果对于每一行,打印值与真实值之间的绝对或相对误差最多为 1 0 − 6 10^{-6} 106

Sample

输入:

5
1 1 4 5 3

输出:

2.80000000
3.33333333
4.50000000
5.00000000
3.00000000

思路:

S i Si Si 为前 i 个元素的前缀和,在平面上放N个点 ( i , S i ) (i, Si) (i,Si),第 x 个点到第 y 个点连线的斜率即为区间 ( x + 1 , y ) (x + 1, y) (x+1,y)的平均值(平均值 = ( S y − S x ) / ( y − x ) (Sy - Sx) / (y - x) (SySx)/(yx) = 斜率),在这个图上求凸包即可

在求凸包的循环中,如果栈顶的点不属于凸包,则弹出栈顶元素,该点的ans即为该点与弹出后的栈顶点的斜率值。
求完凸包后,凸包上的相邻两点的斜率即为ans

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=3e5+10;
int T;
vector<int> stk;// 定义点的结构体
struct Point{double x, y;// 重载减法运算符,用于计算向量差Point operator-(Point& p){Point t;t.x = x - p.x;t.y = y - p.y;return t;}// 计算向量叉积double cross(Point p) {return x * p.y - p.x * y;}
};// 比较函数,用于排序点
bool cmp(Point& p1, Point& p2) {if (p1.x != p2.x) return p1.x < p2.x;return p1.y < p2.y;
}Point point[N];  // 保存无序的点
int convex[N];  // 保存组成凸包的点的下标
int n;  // 无序点的个数
int sum[N];  // 前缀和数组
double ans[N];  // 保存每个点的最大斜率
bool st[N];  // 标记点是否在凸包中(未在代码中使用)// 计算两点间的斜率
double kk(Point& a, Point& b) {return (b.y - a.y) * 1.00 / (b.x - a.x);
}// 构建凸包
void GetConvexHull() {int total = 0;convex[total++] = n;  // 将最后一个点(索引为 n)加入凸包ans[n] = 1.00 * (sum[n] - sum[n - 1]);  // 计算最后一个点的斜率for (int i = n - 1; i >= 0; i--) {while (total > 1 && (point[convex[total - 1]] - point[convex[total - 2]]).cross(point[i] - point[convex[total - 1]]) <= 0) {ans[convex[total - 1]] = kk(point[convex[total - 1]], point[convex[total - 2]]);  // 计算斜率total--;  // 弹出栈顶点}convex[total++] = i;  // 将当前点加入凸包}for (int i = total - 1; i >= 1; i--) {ans[convex[i]] = kk(point[convex[i]], point[convex[i - 1]]);  // 计算斜率}return;
}// 解决问题的主函数
void solve() {cin >> n;  // 读取点的个数int x;sum[0] = 0;point[0] = {0, 0};for (int i = 1; i <= n; i++) {cin >> x;sum[i] = sum[i - 1] + x;  // 计算前缀和point[i] = {i, sum[i]};  // 初始化点}GetConvexHull();  // 构建凸包for (int i = 0; i < n; i++) {printf("%.8lf\n", ans[i]);  // 输出每个点的最大斜率}
}signed main() {solve();  // 调用解决问题的主函数return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/869258.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

看懂什么是Halo2

目录 Halo2(零知识证明框架)是什么 Halo2概述 Halo2的原理 电路开发 斐波那契数列举例说明 Halo2的应用 结论 PLONK算法是什么 PLONK算法概述 PLONK算法原理 1. 电路描述与约束 2. 多项式表达与验证 3. 初始设置与随机性 PLONK举例说明 PLONK例子:验证简单的…

【漏洞复现】29网课交单平台 SQL注入

声明&#xff1a;本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动&#xff0c;将与本文档的作者或发布者无关。 一、漏洞描述 29网课交单平台是一个在线学习平台&#xff0c;用于帮助学生完成网络课程的学习任务。这个平台提供了包括…

Transformer中的编码器和解码器结构有什么不同?

Transformer背后的核心概念&#xff1a;注意力机制&#xff1b;编码器-解码器结构&#xff1b;多头注意力等&#xff1b; 例如&#xff1a;The cat sat on the mat&#xff1b; 1、嵌入&#xff1a; 首先&#xff0c;模型将输入序列中的每个单词嵌入到一个高维向量中表示&…

前端面试题34(在移动应用中,通用的实时传输协议)

在移动应用中&#xff0c;选择实时传输协议时通常会考虑几个关键因素&#xff1a;网络效率、功耗、实时性、跨平台兼容性以及数据类型&#xff08;如文本、图像、视频&#xff09;。以下是几种常用的实时传输协议及其在移动应用中的适用性&#xff1a; 1. WebSocket WebSocke…

华为od 100问 持续分享-2

我是一名软件开发培训机构老师&#xff0c;我的学生已经有上百人通过了华为OD机试&#xff0c;学生们每次考完试&#xff0c;会把题目拿出来一起交流分享。 重要&#xff1a;2024年5月份开始&#xff0c;考的都是OD统一考试&#xff08;D卷&#xff09;&#xff0c;题库已经整…

AI转绘_animatediff-cli-prompt-travel

这个工具有两种主要模式&#xff1a;它可以直接通过提示创建视频&#xff0c;或者它可以对现有视频进行风格化。还有方法可以提高视频的分辨率。 正如工具名称所示&#xff0c;它的一个主要特点是"提示旅行"。这意味着你可以例如使用特定的提示用于前20帧&#xff0…

Github绑定自己的域名

Github绑定自己的域名 1.注册自己的域名2.在GitHUb上创建一个自己的仓库&#xff0c;添加域名2.1 创建仓库2.2 添加域名2.3 在Setting中将域名添加到Custom domain中 3.添加域名解析获取ip地址4.在阿里云修改域名解析记录5.ping 域名即可成功 详细内容可参该博客&#xff1a; …

算法复杂度

目录 1. 数据结构前言 1.1 数据结构 1.2 算法 2. 算法效率 2.1 复杂度的概念 3. 时间复杂度 3.1 大O的渐进表示法 3.2 时间复杂度计算示例: 3.2.1 示例1 3.2.2 示例2 3.2.3 示例3 3.2.4 示例4 3.2.6 示例6 4. 空间复杂度 4.1 空间复杂度计算示例 4.1.1 示例1 …

Nacos2.X 配置中心源码分析:客户端如何拉取配置、服务端配置发布客户端监听机制

文章目录 Nacos配置中心源码总流程图NacosClient源码分析获取配置注册监听器 NacosServer源码分析配置dump配置发布 Nacos配置中心源码 总流程图 Nacos2.1.0源码分析在线流程图 源码的版本为2.1.0 &#xff0c;并在配置了下面两个启动参数&#xff0c;一个表示单机启动&#…

各种软件启动方式

各种软件启动方式 1. MySQL # 启动 service mysqld start # 关闭 service mysqld stop # 重启 service mysqld restart2. Redis # 启动 service redisd start # 关闭 service redisd stop3. nginx #启动 ./nginx #关闭 ./nginx -s quit #快速关闭 ./nginx -s stop # 重新加…

nlp中tokenizer用法

1&#xff0c;将文本转换为标记&#xff1a; 将输入文本分解成一系列标记&#xff08;tokens&#xff09;&#xff0c;这些标记可以是单词、子词、字符等。例如&#xff0c;句子 "Hello, world!" 可以被分解为 ["Hello", ",", "world"…

Java面试八股之MySQL主从复制机制简述

MySQL主从复制机制简述 MySQL的主从复制机制是一种数据复制方案&#xff0c;用于在多个服务器之间同步数据。此机制允许从一个服务器&#xff08;主服务器&#xff09;到一个或多个其他服务器&#xff08;从服务器&#xff09;进行数据的复制&#xff0c;从而增强数据冗余、提…

Qt 音频编程实战项目

一Qt 音频基础知识 QT multimediaQMediaPlayer 类&#xff1a;媒体播放器&#xff0c;主要用于播放歌曲、网络收音 机等功能。QMediaPlaylist 类&#xff1a;专用于播放媒体内容的列表。 二 音频项目实战程序 //版本5.12.8 .proQT core gui QT multimedia greate…

用户特征和embedding层做Concatenation

要将用户特征与嵌入层进行连接&#xff0c;可以使用深度学习框架&#xff08;如TensorFlow或PyTorch&#xff09;中的基本操作。以下是使用PyTorch的示例代码&#xff0c;展示了如何将用户特征与嵌入层连接起来。 示例代码&#xff08;使用PyTorch&#xff09; 安装 PyTorch 如…

@Slf4j idea标红Cannot resolve symbol ‘log‘

一、背景 时间久了没有应用idea,打开工程后项目 log 提示报红&#xff0c;未能解析&#xff0c;Cannot resolve symbol log &#xff0c;Slf4j 注解正常&#xff0c;应用的lombok插件。 检查lombok插件安装情况&#xff0c;发现未安装&#xff0c;重新安装重启idea后正常。 二…

Cesium自定义着色器构件三角面片【闪烁】问题,但是一移动视角就闪烁

问题&#xff1a;已知各个顶点的坐标信息、颜色和索引信息&#xff0c;并自定义绘制三角面片。 但是绘制的三角面片随着视角稍微改动就会出现闪烁现象&#xff01;&#xff01;&#xff01;why? Cesium数据类型的精度问题&#xff0c;例如下面为了获取能接收到高精度坐标信息…

系统架构师考点--信息系统基础知识

大家好。今天我们来总结一下信息系统基础知识的相关考点&#xff0c;每年都会考&#xff0c;一般是在上午场选择题中&#xff0c;占3分左右&#xff0c;其次下午场论文也有可能会出相关的考题。 一、信息系统概述 信息系统&#xff1a; 是由计算机硬件、网络和通信设备、计算…

selenium,在元素块下查找条件元素

def get_norms_ele_text(self):elementsself.get_norms_elements()locBy.CSS_SELECTOR,"div.sku-select-row-label"by loc[0] # 获取By类型&#xff0c;例如By.CSS_SELECTORvalue loc[1] # 获取具体的CSS选择器字符串&#xff0c;例如"div.sku-select-row-l…

Java虚拟机面试题汇总

目录 1. JVM的主要组成部分及其作用&#xff1f; 1.1 运行时数据区划分&#xff1f; 1.2 哪些区域可能会发生OOM&#xff1f; 1.3 堆和栈的区别&#xff1f; 1.4 内存模型中的happen-before是什么&#xff1f; 2. HotSpot虚拟机对象创建流程&#xff1f; 2.1 类加载过程…

CoppeliaSim的简单教程

文章目录 一、 CoppeliaSim1.0 CoppeliaSim 简介1.1 CoppeliaSim 安装1.2 CoppeliaSim 使用 一、 CoppeliaSim 1.0 CoppeliaSim 简介 CoppeliaSim(原V-REP)是一个机器人仿真平台&#xff0c;里面有很多来自别的公司的机器人模型以及完备的物理引擎&#xff0c;我们可以通过 p…