0
点赞
收藏
分享

微信扫一扫

VUE相关知识锦集

Farmer John 的 N头奶牛对他们牛棚的室温非常挑剔。

有些奶牛喜欢温度低一些,而有些奶牛则喜欢温度高一些。

Farmer John 的牛棚包含一排 N个牛栏,编号为 1…N,每个牛栏里有一头牛。

第 i� 头奶牛希望她的牛栏中的温度是 pi,而现在她的牛栏中的温度是 ti。

为了确保每头奶牛都感到舒适,Farmer John 安装了一个新的空调系统。

该系统进行控制的方式非常有趣,他可以向系统发送命令,告诉它将一组连续的牛栏内的温度升高或降低 11 个单位——例如「将牛栏 5…85…8 的温度升高 11 个单位」。

一组连续的牛栏最短可以仅包含一个牛栏。

请帮助 Farmer John 求出他需要向新的空调系统发送的命令的最小数量,使得每头奶牛的牛栏都处于其中的奶牛的理想温度。

输入格式

输入的第一行包含 N。

下一行包含 N 个非负整数 p1…pN,用空格分隔。

最后一行包含 N 个非负整数 t1…tN。

输出格式

输出一个整数,为 Farmer John 需要使用的最小指令数量。

数据范围

1≤N≤10^5,
0≤pi,ti≤100000

输入样例:
5
1 5 3 3 4
1 2 2 2 1
输出样例:
5
样例解释

一组最优的 Farmer John 可以使用的指令如下:

初始温度     :1 2 2 2 1
升高牛棚 2..5:1 3 3 3 2
升高牛棚 2..5:1 4 4 4 3
升高牛棚 2..5:1 5 5 5 4
降低牛棚 3..4:1 5 4 4 4
降低牛棚 3..4:1 5 3 3 4

参考代码:

/*
给定数组a,b,进行m次操作使得两数组相等。
p = a-b,d为p的差分数组。
可以理解为将数组p变为全0的操作次数,每次操作为1。
可以转换为差分,对于p的差分数组d每次对于两个数+1,和-1。最后使得数组全为0;
等价于统计d数组中>0的数pos与<0的数neg求出最大值。
d为差分数组每次要同时改变两个数使其一个+1,一个-1。
若正数全部归零,剩余的让负数和n后的数字做交换。
*/
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
const int N = 1e5+10;
int a[N],b[N];
int n;

int main()
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++)
    {
        cin>>b[i];
        a[i] -= b[i];
    }
    for(int i=n;i>0;i--) a[i] -= a[i-1];
    
    int pos = 0,neg = 0;
    for(int i=1;i<=n;i++)
    {
        if(a[i]>0) pos += a[i];
        else neg -= a[i];
    }
    printf("%d\n",max(pos,neg));
    return 0;
}

 

举报

相关推荐

0 条评论