【Codeforces】1093C Mishka and the Last Exam

本文详细解析了CodeForces 1093C题目,介绍了如何根据已知数组b求解a数组,确保其为递增序列。提供了两种代码实现方式,一种使用cin和cout导致TLE,另一种使用scanf和printf通过测试,展示了算法优化的重要性。

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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值