首页 > 其他 > 详细

100. IncDec序列

时间:2019-11-08 22:37:05      阅读:73      评论:0      收藏:0      [点我收藏+]

 

技术分享图片

技术分享图片

 

 技术分享图片

 

 将差分数组中所有的正数相加求和记作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;
} 

  

100. IncDec序列

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!