差分数组的巧妙运用:
让所有数都相同即:让差分数组bi,b2-->bn都等于0.
每次操作相当于选择i,j.bi++,bj--;
为了让b2->bn都等于0;
正数之和:p,负数之和q
最少操作次数一定是:先选择一正一负,抵消,
然后剩的全正或者全负,与b1||bn+1,进行操作。
最少次数为|p-q|
由于选择b1,bj 和bj, bn+1
会让结果+1或者不变。
所以最终序列有|p-q|+1种情况
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M=100000+7;
int main()
{
int n;
scanf("%d",&n);
int lst=0,x;
ll nf=0,nz=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
if(i!=1)
{
if(x-lst<0)nf+=lst-x;
else nz+=x-lst;
}
lst=x;
}
ll cz=abs(nz-nf);
cout<<cz+min(nz,nf)<<"\n"<<cz+1<<endl;
return 0;
}
来源:CSDN
作者:夕林山寸
链接:https://blog.csdn.net/bjfu170203101/article/details/103621987