AtCoder Regular Contest 093(AtCoder Beginner Contest 092)题解

               AtCoder Regular Contest 093

C题题意:给定N个点,求每次去掉一个点后,依次走过剩余每个点的距离和,最后需要返回起点。

C题题解:用一个数组B记录每个点和前面的点的距离,然后预处理出去掉当前点可以少走的距离,设k是当前点的前一个点和后一个点的距离,那么去掉当前点可以少走的距离就是b[i]+b[i+1]-k,那么结果就是所有和减去每个点可以少走的距离。

AC代码:

#include 
using namespace std;
#define _for(i,a,b) for(int i=a;i<=b;i++)
const int maxn = 100006;
long long n,a[maxn],b[maxn],sum,c[maxn];
int main(int argc, char const *argv[])
{
	cin>>n;
	_for(i,1,n)
	{
		cin>>a[i];
		b[i]=abs(a[i]-a[i-1]);
		sum+=b[i];
	}
	b[n+1]=abs(a[n]);
	sum+=b[n+1];
	_for(i,1,n)
	{
		int k =

你可能感兴趣的:(OJ系列-AtCoder,构造,思维题,前缀和,Atcoder)