100. IncDec序列

 

 将差分数组中所有的正数相加求和记作a,所有的负数相加求和记作b(此处负数的和为正值)

假设a = 5, b = 6那么正数5和负数5可以抵消,剩下的1进行一次+1/-1操作,此时共进行了min(a, b) + abs(a - b) = max(a, b)次

对于结果的种类,因为数列中的数全部一样,即b[2] - b[n]全部为0,即a[1] - a[n]全部相等,那么就转化为a[1]有几种可能的结果

最终序列a可能会有abs(a−b)+1种情况

#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;

typedef long long LL;

const int N = 100010;

int a[N];

int main()
{
	int n;
	cin >> n;
	for(int i = 1; i <= n; ++ i)	cin >> a[i];
	for(int i = n; i >= 2; -- i)	a[i] -= a[i - 1];
	
	LL pos = 0, neg = 0;
	for(int i = 2; i <= n; ++ i)
	{
		if(a[i] > 0)	pos += a[i];
		else if(a[i] < 0)	neg -= a[i];
	}
	
	cout << max(pos, neg) << endl;
	cout << abs(pos - neg) + 1 << endl;
	
	return 0;
} 

  

原文地址:https://www.cnblogs.com/mjn1/p/11823100.html