【Codeforces】1093C Mishka and the Last Exam

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN___CSDN/article/details/87632576

http://codeforces.com/problemset/problem/1093/C

已知b[i]求a[i]和a[n-i+1],n是a数组中元素的个数,a数组的下标从1开始

输出b[1]的时候,直接让a[1] = 0,a[n] = b[0]

接下来的每一组,先让a[i] = b[i],然后求解a[n-i+1],如果出现a[n-i+1]>a[n-i+2],则让a[n-i+1]=a[n-i+2],保证了a数组递增,再来求a[i],因为a[n-i+1]变小,所以a[i]增大,仍然是递增序列

TLE

#include <iostream>

typedef unsigned long long ll;
using namespace std;

int a[200000+5];

int main ()
{
	ios_base::sync_with_stdio(false);
	ll n,x,i;
	cin >> n;
	for(i=1;i<=n/2;i++)
	{
		cin >> x;
		if(i==1)
		{
			a[i] = 0;
			a[n-i+1] = x;
		}
		else
		{
			a[i] = 0;
			a[n-i+1] = x;
			while(a[i]<a[i-1] || a[n-i+1]>a[n-i+2])
			{
				a[i]++;
				a[n-i+1]--;
			} 
		}
	}
	for(i=1;i<=n;i++)
	{
		if(i!=1)
			cout << " ";
		cout << a[i];
	}
	return 0;
} 

AC

#include <iostream>
#include <cstdio>

typedef long long ll;

using namespace std;
ll a[200000+5];

int main ()
{
	ll n,x,i;
	scanf("%lld",&n);
	for(i=1;i<=n/2;i++)
	{
		scanf("%lld",&x);
		if(i==1)
		{
			a[1] = 0;
			a[n] = x;
		}
		else
		{
			a[i] = a[i-1];
			a[n-i+1] = x - a[i];
			if(a[n-i+1] > a[n-i+2])
			{
				a[n-i+1] = a[n-i+2];
				a[i] = x- a[n-i+1];
			}
		}
	}
	for(i=1;i<=n;i++)
	{
		if(i!=1)
			printf(" ");
		printf("%lld",a[i]);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/CSDN___CSDN/article/details/87632576
今日推荐