蓝桥集训之空调
-
核心思想:差分
- 目标将t[i]数组变为s[i]数组
- 求出两数组差值 构成新数组w[i]
- 求出w[i]的差分数组 差分的操作:1.左-1 右+1 2.单纯-1 3.单纯+1
- 因此求出差分数组后 次数即为将所有数变为0
- res = max(正数之和,负数之和**(绝对值)**)
-
#include<iostream> #include<cstring> using namespace std; const int N = 100010; int a[N],b[N],d[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>>c[i]; a[i] -= c[i]; d[i] += a[i]; //求差分数组 d[i+1] -= a[i]; } int z=0,f=0; for(int i=1;i<=n;i++) { if(d[i]>0) z+=d[i]; //正数和 else f -= d[i]; //负数绝对值和 } cout<<max(z,f)<<endl; }