100.增减序列
作者:互联网
原题链接:100. 增减序列
解题思路
求出 a 的差分序列 b,其中 b1 = a1,bi = ai - ai-1(2 <= i <= n)。令 bn+1 = 0。题目对序列 a 的操作,相当于每次可以选出 b1,b2,...,bn+1 中的任意两个数,一个加一,另一个减一。目标是把 b2,b3,...,bn 变为全零。最终得到的数列 a 就是由 n 个 b1 构成的。
从 b1,b2,...,bn+1 中任选两个数的方法可分为四类:
- 选 bi 和 bj,其中 2<=i,j<=n。这种操作会改变 b2,b3,...,bn中两个数的值。应该在保证 bi 和 bj 一正一负的前提下,尽量多采用这种操作,更快的接近目标。
- 选 b1 和 bj,其中 2<=j<=n.
- 选 bi 和 bn+1,其中 2<=i<=n.
- 选 b1 和 bn+1,这种情况没意义。
样例代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 110000
ll n,m,i,j,p,q,a[N];
int main()
{
scanf("%lld",&n);
for (i=1;i<=n;i++)
scanf("%lld",&a[i]);
for (i=2;i<=n;i++)
{
ll c=a[i]-a[i-1];
if (c>0)
p+=c;
else
q-=c;
}
ll ans1=max(p,q),ans2=abs(p-q)+1;
cout<<ans1<<endl<<ans2;
return 0;
}
标签:...,bn,bi,b1,b2,增减,序列,100,ll 来源: https://www.cnblogs.com/hnkjdx-ssf/p/14163662.html