[MAY DAY]五一综合训练 之——最值问题

news2024/10/7 2:28:12

文章目录

  • > **## * 要赋值 !!!!!!! *** %#¥#%#*&!!!!
  • 要赋值
      • 一、双指针求最大连续和
        • 双指针算法
        • 分析:
    • 注意:
      • 二、二分法求最大平均数子数组
  • !!!这道题有很多需要注意的地方
  • 5.mi要赋值


> **## * 要赋值 !!!!!!! *** %#¥#%#*&!!!!

要赋值

一、双指针求最大连续和

在这里插入图片描述
本题单独用前缀和(60分):

#include <bits/stdc++.h>
using namespace std;
int a[200005], m[200005], ans = -INT_MAX, n, o;
int main() {
    cin >> n >> o;
    m[0] = 0;
    for (int i = 1; i <= n; i++) cin >> a[i], m[i] = m[i - 1] + a[i];
    for (int i = 0; i <= n - o; i++)
        for (int j = i + 1; j <= i + o; j++) ans = max(ans, m[j] - m[i]);
    cout << ans;
}

时间复杂度很高,一些超时,一些WA.
在这里插入图片描述

双指针算法

这是一种用左右两个指针来框定一个范围从而减少暴力枚举回溯次数的算法。适用于对时间要求很高的题目,双指针算法的难点在于找到什么时候移动有指针,什么时候移动左指针,这种算法大部分是单向移动,但有时需要双向移动(就比如本题)。
有点类似队列
在这里插入图片描述

分析:

本题的双指针需要回溯。

#include <bits/stdc++.h>
using namespace std;
int n, m, a[200005], dp[200005], q[200005], ans = INT_MIN, head, tail;
int main(){
	cin >> n >> m;
	for(int i = 1; i <= n; i++){
		cin >> a[i];
		dp[i] = dp[i - 1] + a[i];
	}
	for(int i = 0; i <= n; i++){
		while(q[head] + m < i && tail >= head) head++;
		while(dp[i] < dp[q[tail]] && tail >= head) tail--;
		if(i != 0) ans = max(ans, dp[i] - dp[q[head]]);
		q[++tail] = i;
	}
	cout << ans;
}

本题的q数组是用来存储可能的值的起始位置的,第一个循环用来输入,并算出前缀和。
第二个循环的变量i,一定程度上可看做是第三个指针,因为他可以看做枚举的起点,而tail为终点。
两个循环的作用:
这2个循环是用来调整头指针和尾指针的。第一个循环是为了满足题目中两端差距小于m,第二个循环是找到第一个<=dp[q[tail]]的。

注意:

但遇到代码不好调试观察时,输出中间过程是一种很好的方法,直观又简便,就像这样:
在这里插入图片描述
在这里插入图片描述

二、二分法求最大平均数子数组

在这里插入图片描述
在这里插入图片描述
暴力代码(超时30分):

#include <bits/stdc++.h>
using namespace std;
double a[100005], m[100005], ans = -INT_MAX, n, k;
int main() {
    cin >> n >> k;
    for (int i = 1; i <= n; i++) cin >> a[i], m[i] = m[i - 1] + a[i];
    for (int i = 1; i <= n - k; i++)
        for (int j = i + k; j <= n; j++) {
            double p = (m[j] - m[i]) / (j - i);
            if (p > ans)
                ans = p;
        }
    printf("%d\n", int(ans * 1000));
}

本题运用二分答案的思想,首先找出极大值与极小值,然后不断地二分答案即可
代码:

#include <bits/stdc++.h>
using namespace std;
long double l = INT_MAX, r = INT_MIN, mid;
int n, m;
long double dp[100005], a[100005];
bool f(long double x){
	long double ans = -2005, mi=2005;
	for(int i = 1; i <= n; i++){
		dp[i] = dp[i - 1] + a[i] - x;
	} 
	for(int i = m; i <= n; i++){
		mi = min(mi, dp[i - m]);
		ans = max(ans, dp[i] - mi);
	}
	return ans >= 0;
}
int main(){
	cin >> n >> m;
	for(int i = 1; i <= n; i++) {
		cin >> a[i];
		
	}
	r = 0x3f3f3f3f, l = -0x3f3f3f3f;
	while(r - l > 1e-6) {
		mid = (l + r) / 2;
		if(f(mid)) l = mid;
		else r = mid;
	}
	printf("%d\n",int(r*1000));
}

这个代码分为两部分,主函数部分和f函数部分。主函数就是一个规范的二分,需要注意的是第九行需要减去一个x。

!!!这道题有很多需要注意的地方

  1. double类型
  2. f函数的部分要定义局部变量
  3. r,l是极值!!!
  4. 没有-INT_MAX这种编法,写成INT_MIN.

5.mi要赋值

别像某人一样赋值检查了一个小时,没错,那就是我

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

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

相关文章

Java学习笔记-03

目录 类与对象 类class 对象 修饰符private this关键字 构造函数 继承 权限修饰符 包package 状态修饰符final 类与对象 类 类是对现实生活中一类事物的抽象&#xff0c;里面包含了这类事物共有的属性(名词)和行为(动词)例如人类&#xff0c;人就是一个大类&#xff…

大规模MIMO系统中基于CSI的卷积神经网络定位

来源&#xff1a;投稿 作者&#xff1a;小灰灰 编辑&#xff1a;学姐 论文标题&#xff1a;CSI-based Positioning in Massive MIMO systems using Convolutional Neural Networks 摘要 研究了使用大规模MIMO&#xff08;MaMIMO&#xff09;系统的信道状态信息&#xff08;CS…

mysql 基础操作命令集

目录 目录 数据库操作 查看库命令 使用某个库&#xff08;可以不用分号 &#xff1b;&#xff09; 查看库下所有的表 显示一个表下的所有字段和类型 查看一个表的建表语句 查看表的内容 创建新数据库 创建新表&#xff0c;设定表的字段 插入一行数据 某字段更改数据…

OSI七层模型及各层功能概述

1.OSI的基本概念及原则 OSI是Open System Interconnect的缩写&#xff0c;意为开放式系统互联。其各个层次的划分遵循下列原则&#xff1a; &#xff08;1&#xff09;同一层中的各网络节点都有相同的层次结构&#xff0c;具有同样的功能。&#xff08;2&#xff09;同一节点…

运营商大数据是什么,是如何实现精准获客的

近年来&#xff0c;运营商大数据在市场之上发展迅速&#xff0c;各行各业的公司都在利用运营商大数据获取更加精准有效的企业信息和客户资源。例如&#xff0c;当企业在进行精准营销的过程之中&#xff0c;可以根据线索和条件快速获得更准确的客户名单&#xff0c;而不像传统的…

定时任务方案实现与对比

定时任务分类 定时任务分为分布式定时任务和单机定时任务两个大的方向&#xff0c;他们的适用场景不同。 单机定时任务在单台计算机上运行&#xff0c;其执行结果和单台机器上的数据有关&#xff0c;如对本地机器的缓存做核对、清理日志等。它的 优点 是简单易用&#xff0c;无…

玩着3dmax把Python学了-01

3ds Max 2022以前的版本要借助Python的api来实现Python编程达到编辑绘图脚本的功能&#xff0c;但是好消息来了&#xff0c;3ds Max 2022 起&#xff0c;MaxPlus 不再作为 3ds Max 的 Python API 包含在内。而是3ds Max 将 Python 3.7 的标准版本包涵其中了&#xff0c;位于 [3…

MySQL监控告警及可视化:Zabbix+Percona PMP实现(Part II)

MySQL监控告警及可视化&#xff1a;ZabbixPercona PMP实现&#xff08;Part II&#xff09; PMP插件安装PMP监控脚本配置Web界面导入PMP模板 服务器清单如下&#xff1a; 服务器IP配置OS版本服务器角色172.16.175.x4c8gCentOS 7.7MySQL Server172.16.175.y4c8gCentOS 7.7Zabbi…

Python——基于YOLOV8的车牌识别(源码+教程)

目录 一、前言 二 、完成效果 三、 项目包 四、运行项目 &#xff08;教程&#xff09; 一、前言 YOLOv8LPRNet车牌定位与识别https://www.bilibili.com/video/BV1vk4y1E7MZ/ 最近做了有一个车牌识别的小需求&#xff0c;今天完成了&#xff0c;在此记录和分享 首先&#x…

NECCS|全国大学生英语竞赛C类|听力|短篇新闻|听写填空|16:40~17:10+17:30~18:10

目录 一、听写填空 1. 题型 2. 技巧 &#xff08;1&#xff09;利用间隙 浏览全文 积极预测 &#xff08;2&#xff09;边听边记 &#xff08;3&#xff09;注重检查 二、短篇新闻 1. 试题解读 2. 解题技巧 &#xff08;1&#xff09;预测要点&#xff0c;有的放矢 …

【五一创作】机械臂速成小指南(二十四):逆运动学的雅可比方法

&#x1f468;‍&#x1f3eb;&#x1f970;&#x1f973;需要机械臂相关资源的同学可以在评论区中留言哦&#x1f916;&#x1f63d;&#x1f984; 指南目录&#x1f4d6;&#xff1a; &#x1f389;&#x1f389;机械臂速成小指南&#xff08;零点五&#xff09;&#xff…

Redis消息队列

消息队列&#xff08;Message Queue&#xff09;&#xff0c;字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色&#xff1a; 消息队列&#xff1a;存储和管理消息&#xff0c;也被称为消息代理&#xff08;Message Broker&#xff09; 生产者&#xff1a;发送消…

【hello Linux】线程概念

目录 1. 线程概念的铺设 2. Linux线程概念 2.1 什么是线程 2.2 线程的优点 2.3 线程的缺点 2.4 线程异常 2.5 线程用途 3. Linux进程VS线程 4. Linux线程控制 4.1 POSIX线程库 4.2 创建线程 4.3 进程ID和线程ID 4.4 线程终止 4.5 线程等待 4.6 分离线程 Linux&#x1f337; 1…

FPGA时序约束(六)时序例外约束

系列文章目录 FPGA时序约束&#xff08;一&#xff09;基本概念入门及简单语法 FPGA时序约束&#xff08;二&#xff09;利用Quartus18对Altera进行时序约束 FPGA时序约束&#xff08;三&#xff09;时序约束基本路径的深入分析 FPGA时序约束&#xff08;四&#xff09;主时…

解除Word的编辑保护【简单版】

首先&#xff0c;我们遇到的情况是下图这样的&#xff1a; 点一下停止保护&#xff0c;是下图这样的&#xff1a; 开始解决&#xff1a; 第一种方式&#xff1a;另存为Word Xml 存好了&#xff0c; 打开如下图&#xff08;我用VS打开的&#xff0c;最好找个能够格式化代码的编…

C++---区间DP---棋盘分割(每日一道算法2023.5.2)

注意事项&#xff1a; 涉及到"矩阵/二维前缀和"的一些知识&#xff0c;建议先理解那篇文章。 题目&#xff1a; 将一个 88 的棋盘进行如下分割&#xff1a;将原棋盘割下一块矩形棋盘并使剩下部分也是矩形&#xff0c;再将剩下的部分继续如此分割&#xff0c;这样割了…

echarts数据可视化-动态柱状图

效果如下&#xff1a; 此处用的echarts柱状图为&#xff1a;Axis Align with Tick 本文的要讨论的内容&#xff1a; 1、柱状图样式修改 2、多数据的缩放展示 柱状图样式修改 // 数据 const city reactive([{ value: 335, name: 长沙 },{ value: 310, name: 武汉 },{ value: …

C++类和对象 ——构造函数

C拷贝构造函数详解 什么是拷贝构造函数&#xff1f;拷贝构造函数的特征默认拷贝构造函数为什么需要显示定义构造函数&#xff1f;拷贝构造函数的调用场景什么时候不需要自己定义拷贝构造函数 什么是拷贝构造函数&#xff1f; 在现实生活中&#xff0c;拷贝构造函数就好像我们上…

Linux服务器 容器化部署新版Jenkins

安装Docker 先安装yml yum install -y yum-utils device-mapper-persistent-data lvm2设置加速镜像&#xff08;阿里云镜像&#xff09; sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装docker yum -y install d…

智慧工厂人员定位系统源码,实现对工厂内的人车、物、料等的精确定位

智慧工厂人员定位系统源码 技术架构&#xff1a;Java vue spring boot 系统概述&#xff1a; 采用UWB定位技术&#xff0c;通过在厂区内布设一定数量的定位基站&#xff0c;实时精确地定位员工、车辆、物品上微标签位置&#xff0c;零延时地将人、车、物的位置信息显示在工厂…