其他分享
首页 > 其他分享> > B. Suffix Operations

B. Suffix Operations

作者:互联网

原题链接
考察:枚举,前缀和
思路:
  先考虑不用任意改数字的方法,次数是所有数的绝对值之和.
  再枚举每一个将第\(i\)个数改为第\(i-1\)个数的情况,这里不要漏了将第\(1\)个数改为第\(2\)个数的情况.

Code

#include <iostream> 
#include <cstring>
using namespace std;
typedef long long LL;
const int N = 200010;
const LL INF = 1e14;
int n,a[N],b[N];
LL rsum[N],lsum[N];
int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		for(int i=1;i<=n;i++) scanf("%d",&a[i]),b[i] = a[i]-a[i-1];
		if(n==1)
		{
			puts("0");
			continue;
		}
		a[n+1] = a[n-1];
		memset(rsum,0,sizeof rsum);
		memset(lsum,0,sizeof lsum);
		for(int i=n;i>=1;i--) rsum[i] = abs(b[i])+rsum[i+1];
		for(int i=2;i<=n;i++) lsum[i] = abs(b[i])+lsum[i-1];
		LL ans = min(rsum[3],rsum[2]);
		for(int i=2;i<=n;i++)
			ans = min(lsum[i-1]+abs(a[i+1]-a[i-1])+rsum[i+2],ans);
		printf("%lld\n",ans);
	}
	return 0;
}

标签:Operations,const,Suffix,rsum,int,LL,个数,long
来源: https://www.cnblogs.com/newblg/p/15443133.html