思路:
读到将牛栏5~8的温度升高1个单位时,可以想到差分操作。但是我们该如何得到最小指令数量呢?首先,我们想要将t数组转变为p数组,可以等价为将0数组转变为p-t数组,等价为将0差分数组,转变为p-t差分数组,此时改变几个数即可(将某一个数+1,同时将某个数-1,从而使p-t差分数组转变为0差分数组的次数),求p-t差分数组正数之和即可。
C++代码:
#include<bits/stdc++.h>
using namespace std;
int n;
int p[100010];
int t[100010];
int d[100010];
int dd[100010];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>p[i];
}
for(int i=1;i<=n;i++){
cin>>t[i];
}
for(int i=1;i<=n;i++){
d[i]=p[i]-t[i];
}
for(int i=1;i<=n+1;i++){
dd[i]=d[i]-d[i-1];
}
int num=0;
for(int i=1;i<=n+1;i++){
if(dd[i]>0){
num+=dd[i];
}
}
cout<<num;
return 0;
}
Python代码:
n=int(input())
p=[0]+list(map(int,input().split()))
t=[0]+list(map(int,input().split()))
d=[0]*100010
dd=[0]*100010
for i in range(1,n+1):
d[i]=p[i]-t[i]
for i in range(1,n+2):
dd[i]=d[i]-d[i-1]
num=0
for i in range(1,n+2):
if dd[i]>0:
num+=dd[i]
print(num)