链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
题目描述
给定一个长度为 n(n≤105)(n \leq 10^5 )(n≤105) 的数列a1,a2,…,an{a_1,a_2,…,a_n}a1,a2,…,an,每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一。
求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种。
输入描述:
第一行一个正整数n。 接下来n行,每行一个整数,第i+1行的整数表示aia_iai。
输出描述:
第一行输出最少操作次数。 第二行输出最终能得到多少种结果。
#include <cstdio>
#include <iostream>
using namespace std;
int n;
long long a[100005],pos,neg;
int main()
{
int i;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=n;i>1;i--)
if(a[i]-a[i-1]>0)
pos+=a[i]-a[i-1];
else
neg+=a[i-1]-a[i];
cout<<max(pos,neg)<<endl<<abs(pos-neg)+1<<endl;
return 0;
}
解析可以看这个:增减序列( 差分 )_给定一个长度为n的序列 a1,a2,…,an ,请问多少种方案,能够从中选取一个长度恰好为-CSDN博客