Acwing4262. 空调

文章讲述了在解决ACWING4262空调问题中,如何使用差分方法计算牛栏需要的温度调整。通过输入牛栏初始温度和目标温度,利用差分求解每个牛栏上升的温度,最后找出最大升温和降温值。
摘要由CSDN通过智能技术生成

分析:

这道题就是典型的差分问题,遇到那些区域增加的问题一般就是差分问题

差分的学习见专栏第一篇内容基础算法:差分-CSDN博客以及大佬写的这一篇ACWING/4262. 空调-CSDN博客

这道题的范围都是一个数字,因为用了差分,所以相当于是一起加的。

假如:和牛所喜欢的温度相差的温度分别为0 3 1 1 3

那么对应的差分f[i]为 0 3 -2 0 2,是0的那个说明这个对应的牛栏要上升的温度和前一个牛栏是一样的,不用管。

代码:

//Acwing4262 空调
#include<bits/stdc++.h>
using namespace std;
const int N=100010;   //
int main()
{
	int n;
	scanf("%d",&n);
	int a[N],b,f[N];
	a[0]=0;
	for(int i=1;i<=n;i++)
		{
			scanf("%d",&a[i]);
		}
	/*求每个牛栏需要改变的温度*/
	for(int i=1;i<=n;i++)
		{
			scanf("%d",&b);
			a[i]=a[i]-b;
		}
	/*求差分:如果还是用数组a[i]来装的话,则差分要从后往前求,不然可能出错*/
	for(int i=n;i>=1;i--)
		{
			f[i]=a[i]-a[i-1]; 
		 } 
	int pos=0,neg=0;
	for(int i=1;i<=n;i++)
		{
			
			if(f[i]>0)   pos+=f[i];
			else  neg=neg-f[i];    //注意:用减法转化为绝对值的及结果 
			}	
	printf("%d",max(pos,neg));
	return 0;
}

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值