链接:登录—专业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];elseneg+=a[i-1]-a[i];cout<<max(pos,neg)<<endl<<abs(pos-neg)+1<<endl;return 0;
}
解析可以看这个:增减序列( 差分 )_给定一个长度为n的序列 a1,a2,…,an ,请问多少种方案,能够从中选取一个长度恰好为-CSDN博客