蓝桥杯集训·每日一题2024 (差分)

前言:

差分笔记以前就做了,在这我就不再写一遍了,直接上例题。

例题:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int a[10009],b[100009];
int main(){
	int n,ans1=0,ans2=0;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		cin>>b[i];
	}
	for(int i=1;i<=n;i++){
		a[i]=a[i]-b[i];
	}
	for(int i=n;i>=1;i--){
		a[i]=a[i]-a[i-1];
		if(a[i]>0)ans1+=a[i];
		else ans2-=a[i];
	}
	cout<<max(ans1,ans2)<<endl;
	return 0;
}

题目要求同时将一段子数组全部加上1或者减去1, 直觉上就考虑采用差分数组的思想, 将原数组每一项的原始温度减去目标温度, 得到每一项需要改变的数值, 然后求出该数组的差分数组, 目标是使得差分数组的每一项变成0, 我们的操作方式有2种:选择任意两项, 一项加1, 另一项减1选择任意一项加1或者减1显然, 使数组全部变为0的最少操作方案就是 差分数组中负数和与正数和的绝对值的最大值。

相关推荐
其实防守也摸鱼6 小时前
个人学习 Pwn 思路:从基础到漏洞利用的进阶路径
大数据·前端·人工智能·chrome·算法·安全·网络安全
Nuanyt7 小时前
LeetCode Hot 100 链表专题(五)· 2 题(Java)
java·算法·leetcode·链表
w_zero_one10 小时前
递归算法(一)
java·开发语言·算法
风影同志7832412 小时前
20 个比特能装下多少行情?——实测拆解 Kronos 的 K 线分词器
算法
写的都是BUG12 小时前
APK 里的钥匙,一直就放在门口:聊聊加固真正该做什么
前端·算法
地平线开发者13 小时前
CLIP 的零样本分类:一组文本如何变成图像分类器?
算法
京东云开发者13 小时前
从“会生成”到“能生产”:萤火虫 AIGC 平台的 AI Infra 实践
算法·aigc·产品
youshi666813 小时前
PID——算法改进
算法
一只不想敲代码的程序猿15 小时前
如何更高效地拆解问题?
算法