E. The Human Equation(前缀和与差分数组)

news2024/11/20 20:24:40

在这里插入图片描述
嘤,总算过了
题目大意:可以从一个序列中按照顺序(可间断)选出一堆数,选出的这些数可以做以下操作:

  • 奇数位置 + 1 +1 1,偶数位置 − 1 - 1 1
  • 偶数位置 + 1 +1 1,奇数位置 − 1 - 1 1

直到整个序列变成全 0 0 0,停止。问整个过程所需要的最小操作次数

这个题我一开始想的是就用原数组做,构造出一个最长的正负交错的序列,比如现在栈里面如果有一个负数,那就应该在接收一个正数,如果再遇到一个负数就和栈里的负数比较,哪个小要哪个。以栈中最小的数对所有数进行处理,重复上述过程直到所有元素为 0 0 0.这个过程复杂度取决于元素的大小。但是如果考虑这个序列:
− 1 , 2 , − 3 , 4 , − 5 , . . . . -1,2,-3,4,-5,.... 12345....这样的序列一定会超时,如果考虑处理完栈中的元素对其清0,下次操作未必是最长的(未必最优)

下面的思路参考文章:
文章1
文章2

求一个序列的前缀和数组,那么如果原来的数组全 0 0 0就应该等价于前缀和数组全0.为啥要转换成前缀和数组?他有这样的好处,我们来看:
由于是在原序列中可以按照顺序随意间隔取数,转换在前缀和数组就是随意 + 1 , − 1 +1,-1 +11。(这个随意不是指 + 1 , − 1 +1,-1 11同时进行,而是指 + 1 +1 +1操作可以随意进行, − 1 -1 1操作可以随意进行。)而原数组相当于是前缀和数组的差分数组(差分数组介绍:点我)所以在前缀数组中 + 1 +1 +1,在差分数组中会自动弄出一个 + 1 , − 1 +1,-1 +1,1
(前后: a , b , c ; a,b,c; a,b,c;差分数组: a , d e l t a 1 , d e l t a 2 ; a,delta1,delta2; a,delta1,delta2;
a , b + 1 , c ; a,b+1,c; a,b+1,c;差分数组: a , d e l t a 1 + 1 , d e l t a 2 − 1 a,delta1+1,delta2-1 a,delta1+1,delta21)
我们假设对前缀数组中的元素是这样操作的:

1,0,0,1,0,0,1

则在原数组中是:

1-101-101(符合原要求)

如果在前缀数组中这样做:

11

原数组:

10

这样的话,只要计算出前缀和的最大值和最小值就可以了, 最大值 − 最小值 最大值-最小值 最大值最小值一定是最小的操作次数,不过要注意初始最大值和最小值为0.如果全都是负数的话,那么最优操作是将最小负数提上来。 最大值 − 最小值 最大值-最小值 最大值最小值是在最大值为正数,最小值为负数的情况下成立的,为了把正数拉下来,把负数抬上去。

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define min(a,b) (a<b)?a:b
#define max(a,b) (a>b)?a:b
typedef long long ll;
const int length = 2e5 + 5;
ll num[length];
ll qianzhui[length];
int main(void)
{
	int t;
	scanf_s("%d", &t);
	for (int i = 0; i < t; i++)
	{
		int n;
		scanf_s("%d", &n);
		ll min1 = 0;
		ll max1 = 0;
		for (int i = 0; i < n; i++)
		{
			scanf_s("%lld", &num[i]);
			if (i == 0)
			{
				qianzhui[i] = num[i];
			}
			else
				qianzhui[i] = qianzhui[i - 1] + num[i];
			min1 = min(min1, qianzhui[i]);
			max1 = max(max1, qianzhui[i]);
		}
		printf("%lld\n", max1 - min1);
	}
}

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

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

相关文章

微信小程序项目实例——食堂吃哪个

微信小程序项目实例——食堂吃哪个 文章目录微信小程序项目实例——食堂吃哪个一、项目展示二、操作流程和核心代码三、效果展示文末项目代码见文字底部&#xff0c;点赞关注有惊喜 一、项目展示 这是一款娱乐性的小程序 目的是为了解决大学生吃饭的选择困难症 用户可以选择不…

51单片机的特殊功能寄存器(SFR)

阅读前提醒&#xff1a; 文中提到的8051指的是8051微控制器&#xff0c;即51单片机 在上一篇文章51单片机的存储结构中&#xff0c;提到8051微控制器的RAM被划分为通用寄存器、按位寻址寄存器、寄存器组、以及特殊功能寄存器。 这里讲一下特殊功能寄存器&#xff08;SFR&…

五金制造业ERP如何解决企业销售管理难题?

销售管理是五金制造企业管理中非常重要的一个环节&#xff0c;它决定着企业发展的提速和效益的提升。那么企业要如何才能做好销售管理呢&#xff1f;在这里五金制造业ERP系统就起到了重要作用。五金制造业常见的销售管理难题及解决方法&#xff1a;销售插单改单严重&#xff0c…

在不同环境下 Docker 的安装部署

本篇内容主要介绍了&#xff1a;Docker&#xff1a;不同环境下的安装部署&#xff0c;包括&#xff0c;Docker 在 Centos7 下的安装、Docker 在 MacOS 下的安装、Docker 在 Windows 下的安装、以及 Docker 服务相关基础命令&#xff01; 文章目录一、Docker 在 Centos7 下的安装…

使用Redhat OpenStack发放云主机

云管理员操作创建项目登录到OpenStack主界面&#xff0c;使用admin账户登录&#xff0c;创建项目虚拟内核&#xff1a;表明此项目可以使用的vCPU的数量实例&#xff1a;表明该项目最多可以运行的虚拟机数量注入的文件&#xff1a;表明最多可以向此数据中心存多少文件已注入文件…

react基础Day03-生命周期render props模式高阶组件原理揭秘

组件生命周期&#xff08;★★★&#xff09; 目标 说出组件生命周期对应的钩子函数钩子函数调用的时机 概述 意义&#xff1a;组件的生命周期有助于理解组件的运行方式&#xff0c;完成更复杂的组件功能、分析组件错误原因等 组件的生命周期&#xff1a; 组件从被创建到挂…

JVM学习(二):JVM监控及诊断工具-命令行篇

一、概述性能诊断是软件工程师在日常工作中需要经常面对和解决的问题&#xff0c;在用户体验至上的今天&#xff0c;解决好应用的性能问题能带来非常大的收益。Java 作为最流行的编程语言之一&#xff0c;其应用性能诊断一直受到业界广泛关注。可能造成Java应用出现性能问题的因…

十二.自定义类型:结构体、联合、枚举

目录 一.结构体 1.结构体类型的基础知识 &#xff08;1&#xff09;结构的声明 &#xff08;2&#xff09;匿名结构体 &#xff08;3&#xff09;结构体变量的定义和初始化 &#xff08;4&#xff09;结构的自引用 &#xff08;5&#xff09;结构体传参 2.结构体内存对齐…

227. 基本计算器 II

227. 基本计算器 II题目算法设计&#xff1a;栈扩展&#xff1a;后缀表达式题目 传送门&#xff1a;https://leetcode.cn/problems/basic-calculator-ii/submissions/ 算法设计&#xff1a;栈 一个功能完备的计算器功能&#xff0c;有很多功能&#xff0c;我们需要从最简单的…

【CAD .NET】第一课 开发自己的CAD软件

开发自己的CAD软件(解析库私信我buy) 介绍 CAD .NET 为在 .NET 环境下开发解决方案的库。它支持 AutoCAD DWG、DXF、PLT 和其他 CAD 格式。它支持 AutoCAD DWG, DXF, PLT 和其他 CAD 格式。 该库可用于广泛领域: 处理所有项目阶段的工业图纸 监测和远程控制程序 数控(C…

ReactNative0.71正式版发布,Ts作为首要开发语言

时隔近4个月的时间&#xff0c;ReactNative带来了0.71版本的更新&#xff0c;这速度对比隔壁Flutter不得不说是真的有的慢。 这个版本的更新的内容还是比较重磅和突破性的&#xff0c;主要体现在如下几点&#xff1a; 编程语法默认改为TypeScript使用Flexbox Gap使布局更加简…

AlmaLinux 9部署JumpServer

JumpServer简介 JumpServer 是广受欢迎的开源堡垒机&#xff0c;是符合 4A 规范的专业运维安全审计系统。 JumpServer 使用 Python 开发&#xff0c;配备了业界领先的 Web Terminal 方案&#xff0c;交互界面美观、用户体验好。 JumpServer 采纳分布式架构&#xff0c;支持多…

【C++11】—— 类的新功能

目录 一、移动构造和移动赋值的特点 二、类成员变量初始化 三、强制生成默认函数的关键字default 四、禁止生成默认函数的关键字delete 五、继承和多态中的fifinal与override关键字 一、移动构造和移动赋值的特点 默认成员函数 原来C类中&#xff0c;有6个默认成员函数&a…

Yolov8实例分割Tensorrt部署实战

目录 0 引言 1 生成onnx模型 2 onnx转为tensorrt的engine模型 3 Tensorrt推理 3.1 yolov8n-seg分割结果 3.2 yolov8s-seg分割结果 3.3 yolov8m-seg分割结果 3.4 yolov8l-seg分割结果 3.5 yolov8x-seg分割结果 0 引言 ultralytics在github发布了yolov8模型&#xff0c;…

C语言 atoi 函数解析

文章目录前言atoi函数的介绍atoi函数的使用atoi函数的自我实现写在最后前言 对于atoi函数大家可能会有些陌生&#xff0c;不过当你选择并阅读到这里时&#xff0c;请往下阅读&#xff0c;我相信你能对atoi函数熟悉该函数的头文件为 <stdlib.h> 或 <cstdlib> atoi函…

Android Studio Electric Eel | 2022.1.1 发布,快来看看有什么大更新吧

原文链接&#xff1a;https://developer.android.com/studio/releases 本次 Android Studio 又发布了大量的内容更新&#xff0c;按照惯例推荐是等两个小版本后再更新会比较稳&#xff0c;当然也鼓励大家尝尝鲜&#xff0c;本次更新推出了大量实用的功能。 另外由于国内对更新…

大学生在校和校外可以开展的兼职,你肯定不知道

大学生的空闲时间比较多&#xff0c;适合大学生的兼职也有很多&#xff0c;因为大学生逻辑思维更强、大脑灵活、接受新事物能力强&#xff0c;而且大多都有电脑手机&#xff0c;可以做一点网上的兼职。如果你在学校有一定条件的话&#xff0c;还可以开展在学校里另类的兼职&…

1580_AURIX_TC275_SMU模块初步

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) SMU集中了所有软硬件的Alarm信息&#xff0c;这个在之前的很多模块的描述中看得出来的。默认情况下&#xff0c;其实只有看门狗的Alarm是开的&#xff0c;其他的都是关的。这个描述跟我之前…

[ 问题解决篇 ] 设置windows密码策略并且更改用户密码 -- 解决windwos密码无法设置为1的问题

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

P3654 First Step (ファーストステップ)

P3654 First Step (ファーストステップ) 题目背景 知らないことばかりなにもかもが&#xff08;どうしたらいいの&#xff1f;&#xff09; 一切的一切 尽是充满了未知数&#xff08;该如何是好&#xff09; それでも期待で足が軽いよ&#xff08;ジャンプだ&#xff01;&…