USACO 2024年1月比赛 铜组 BALANCING BACTERIA

第三题:BALANCING BACTERIA

标签:思维、差分

题意:给定 n n n个数, a 1 , a 2 , a 3 . . . a n a_1,a_2,a_3...a_n a1,a2,a3...an,每次操作 可以选择数字 L ( 1 < = L < = n ) L(1<=L<=n) L1<=L<=n,并选择增加或者减少。
比如增加的情况,从第 n n n个数开始,第 n n n个数增加 L L L,第 n − 1 n-1 n1个数增加 L − 1 L-1 L1,第 n − 2 n-2 n2个数增加 L − 2 L-2 L2…,依次类推,直到增加值为 0 0 0,再往前就不增加(即第 1 1 1个到第 n − L n-L nL个数不增加值)
求将所有数变成 0 0 0的最少操作次数。( 1 < = n < = 2 ∗ 1 0 5 , 1 0 − 15 < = a i < = 1 0 15 1<=n<=2*10^5,10^{-15}<=a_i<=10^{15} 1<=n<=2105,1015<=ai<=1015

举个例子:比如有两个数 − 1 3 -1\ \ \ 3 1   3
可以先从选择数字 L = 1 L=1 L=1并进行减少,操作 5 5 5次,把序列变成: − 1 − 2 -1\ \ \ \ -2 1    2
然后选择数字 L = 2 L=2 L=2,并进行增加,操作 1 1 1次,把序列变成: 0 0 0\ \ \ 0 0   0。总共 6 6 6次操作。

题解:以样例 2 2 2为例,有 5 5 5个数: 1 3 − 2 − 7 5 1\ \ \ 3 \ \ -2 \ \ -7 \ \ \ 5 1   3  2  7   5
我们维护一个差分数组 b i b_i bi a i − a i − 1 a_i-a_{i-1} aiai1 1 2 − 5 − 5 12 1\ \ \ 2 \ \ -5 \ \ -5 \ \ \ 12 1   2  5  5   12
这个差分数组表示原 a a a数组中相邻两个数的差值,我们额外对 i = 1 i=1 i=1的时候求 b 1 = a 1 − a 0 b_1=a_1-a_0 b1=a1a0 a 0 = 0 a_0=0 a0=0
再对差分数组 b i b_i bi做差分, c i = b i − b i − 1 c_i=b_i-b_{i-1} ci=bibi1 1 1 − 7 0 17 1 \ \ 1 \ \ -7 \ \ 0 \ \ 17 1  1  7  0  17

a i a_i ai: 1 3 − 2 − 7 5 1\ \ \ 3 \ \ -2 \ \ -7 \ \ \ 5 1   3  2  7   5
1 1 1 a i a_i ai − 1 − 2 − 3 − 4 − 5 = > 0 1 − 5 − 11 0 -1\ -2\ -3\ -4 \ -5=> 0\ \ \ 1 \ \ -5 \ \ -11 \ \ \ 0 1 2 3 4 5=>0   1  5  11   0 (操作次数 + 1 +1 +1
2 2 2 a i a_i ai 0 − 1 − 2 − 3 − 4 = > 0 0 − 7 − 14 − 4 0\ -1\ -2\ -3 \ -4=> 0\ \ \ 0 \ \ -7 \ \ -14 \ \ \ -4 0 1 2 3 4=>0   0  7  14   4 (操作次数 + 1 +1 +1
3 3 3 a i a_i ai 0 0 1 2 3 = > 0 0 0 0 17 0\ 0\ 1\ 2 \ 3=> 0\ \ \ 0 \ \ 0 \ \ 0 \ \ \ 17 0 0 1 2 3=>0   0  0  0   17 (操作次数 + 7 +7 +7
4 4 4 a i a_i ai 0 0 0 0 0 = > 0 0 0 0 17 0\ 0\ 0\ 0 \ 0=> 0\ \ \ 0 \ \ 0 \ \ 0 \ \ \ 17 0 0 0 0 0=>0   0  0  0   17 (操作次数 + 0 +0 +0
5 5 5 a i a_i ai 0 0 0 0 − 1 = > 0 0 0 0 0 0\ 0\ 0\ 0 \ -1=> 0\ \ \ 0 \ \ 0 \ \ 0 \ \ \ 0 0 0 0 0 1=>0   0  0  0   0 (操作次数 + 17 +17 +17

我们能够发现每次归 0 0 0的操作次数就是对应 c i c_i ci的绝对值。其实就是对 b i b_i bi进行差分,得到每个对应的后缀需要修改多少。
代码

#include <bits/stdc++.h>
using namespace std;const int N = 2e5 + 10;
typedef long long ll;
ll a[N], b[N], n, ans = 0;int main() {cin >> n;for (int i = 1; i <= n; i++) {cin >> a[i];b[i] = a[i] - a[i - 1]; // 差分}for (int i = 1; i <= n; i++) {ans += abs(b[i] - b[i - 1]);}cout << ans << endl;return 0;
}

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

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

相关文章

【linux】vim多行操作命令

文章目录 1. vim多行同时修改2. vim复制/移动多行3. vim删除多行4. vim设置缩进空格 回顾&#xff1a;vi/vim常用命令 1. vim多行同时修改 &#xff08;1&#xff09; ctrl v &#xff08;2&#xff09; 按 下箭头&#xff0c;选择多行 &#xff08;3&#xff09; shift i,…

软考笔记--信息系统开发方法(上)

信息系统是一个极其复杂的人机交互系统&#xff0c;它不仅包含计算机技术&#xff0c;通信技术和网络规划以及其他的工程技术&#xff0c;而且&#xff0c;它还是一个复杂的管理系统&#xff0c;需要管理理论和方法的支持&#xff0c;因此&#xff0c;与其他工程项目相比&#…

自然语言转SQL的应用场景探索

自然语言转SQL的应用场景探索 1. 自然语言转sql有哪些解决方案2. 自然语言转sql有哪些应用场景3. 自然语言转sql在智能制造领域有哪些应用场景 1. 自然语言转sql有哪些解决方案 自然语言转SQL&#xff08;NL2SQL&#xff09;是一个涉及自然语言处理&#xff08;NLP&#xff09…

JNI教程之数组操作

1. 创建数组&#xff1a;New[type]Array /** 新建数组 length: the array length. RETURNS: Returns a Java array, or NULL if the array cannot be constructed. */ jbyteArray javaArray env->NewByteArray(1024*1024);New[PrimitiveType]Array RoutinesArray TypeNewB…

[嵌入式AI从0开始到入土]15_orangepi_aipro欢迎界面、ATC bug修复、镜像导出备份

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…

单片机学习笔记---红外遥控(外部中断)

目录 红外遥控简介 硬件电路 基本发送与接收 NEC编码​​​​​​​ 遥控器键码 复习外部中断和定时器 红外遥控简介 红外遥控是利用红外光进行通信的设备&#xff0c;由红外LED将调制后的信号发出&#xff0c;由专用的红外接收头进行解调输出 通信方式&#xff1a;单工…

WebGL中开发科学数据可视化应用

WebGL在科学数据可视化领域有广泛的应用&#xff0c;可以用于呈现和解释复杂的科学数据。以下是在WebGL中开发科学数据可视化应用时的一些建议&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.选择合…

C++开发基础之函数的参数类型高级用法

前言 当涉及到高级参数传递方式时&#xff0c;有几种常见的技术可以在 C 中使用。下面是对每种技术的详细介绍&#xff0c;并附带示例说明&#xff1a; 1. 指针的引用&#xff08;Reference to Pointer&#xff09; 指针的引用允许在函数内部修改指针本身&#xff0c;而不仅…

BERT模型中的input_ids和attention_mask参数

一、概述 1.1 input_ids 在BERT模型及其衍生体中&#xff0c;输入文本首先经过一个分词处理流程&#xff0c;其中文本被细分为单词或子单词&#xff08;subwords&#xff09;&#xff0c;每个分词随后映射到一个唯一的整数标识符。这些标识符组成了所谓的input_ids数组&#x…

2、电源管理入门之开机详解

目录 1. 硬件上电 2. ATF运行 3. Linux启动 3.1 内核启动start_kernel 3.2 平台启动setup_arch 3.4 DTS初始化psci_dt_init 3.5 系统rest创建kernel_init线程 3.6 SMP初始化smp_init 3.7 PSCI接口psci_cpu_on 3.8 SMC返回secondary_entry 系统开机牵扯到:“我是…

记录人工智能领域的人、事、社区

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 简述概要关注人物OpenAI团队成员 关注事件2015年2016年2017年2018年2019年2020年2021年2022年2023年2024年 关注社区OpenAITensorFlowPyTorchMIT Technology ReviewReddit Machine LearningIEEE Transactions on Neural Net…

java 使用documents4j将XML转为pdf文件的方式

1.背景&#xff1a; 通过spire.doc.free将word转换成PDF时存在缺陷&#xff1a;只能获取前3页。获取全文另外需支付费用。 2.解决办法 使用documents4j&#xff0c;documents4j会保留原word文件中更多的样式&#xff0c;如修订模式下的差异化字体颜色、文档右侧修订记录等。 …

信息学奥赛一本通1188:菲波那契数列(2)

1188&#xff1a;菲波那契数列(2) 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 70272 通过数: 26790 【题目描述】 菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1&#xff0c;接下来每个数都等于前面2个数之和。 给出一个正整数a&#xff0c;要求菲…

Android Studio基础(下载安装与简单使用)

1、搭建Android开发平台 1.1 Android Studio 下载地址及版本说明 Android 开发者官网&#xff1a; https://developer.android.com/index.html&#xff08;全球&#xff0c;需科学上网&#xff09; https://developer.android.google.cn/index.html&#xff08;国内&#xff…

oracle INSERT 批量插入写法

直接采用mysql那种INSERT批量插入语句的写法&#xff0c;会报 SQL 错误 [933] [42000]: ORA-00933: SQL 命令未正确结束 它可以使用以下方法来批量插入数据&#xff1a; 使用INSERT ALL语句&#xff1a;可以在一条INSERT语句中插入多个记录。使用这种方法&#xff0c;您可以为…

十三、集合进阶——单列集合 及 数据结构

单列集合 及 数据结构 13.1 集合体系结构13.1.2 单列集合1. Collection2.Collection 的遍历方式迭代器遍历增强for遍历Lambda表达式遍历 3.List集合List集合的特有方法List集合的遍历方式五种遍历方式对比 4.数据结构1).栈2).队列3&#xff09;数组4&#xff09;链表小结5&…

PyTorch – 逻辑回归

data 首先导入torch里面专门做图形处理的一个库&#xff0c;torchvision&#xff0c;根据官方安装指南&#xff0c;你在安装pytorch的时候torchvision也会安装。 我们需要使用的是torchvision.transforms和torchvision.datasets以及torch.utils.data.DataLoader 首先DataLoa…

Tomcat是如何打破“双亲委派“机制的

目录 一、什么是双亲委派机制? 二、什么情况下我们需要破坏双亲委派模型?

营销系统黑名单优化:位图的应用解析 | 京东云技术团队

背景 营销系统中&#xff0c;客户投诉是业务发展的一大阻碍&#xff0c;一般会过滤掉黑名单高风险账号&#xff0c;并配合频控策略&#xff0c;来减少客诉&#xff0c;进而增加营销效率&#xff0c;减少营销成本&#xff0c;提升营销质量。 营销系统一般是通过大数据分析建模…

2024年了,如何从 0 搭建一个 Electron 应用

简介 Electron 是一个开源的跨平台桌面应用程序开发框架&#xff0c;它允许开发者使用 Web 技术&#xff08;如 JavaScript、HTML 和 CSS&#xff09;来构建桌面应用程序。Electron 嵌入了 Chromium&#xff08;一个开源的 Web 浏览器引擎&#xff09;和 Node.js&#xff08;一…