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