B. MKnez‘s ConstructiveForces Task codeforces 1779B

55 篇文章 1 订阅
该文详细解释了一道来自Codeforces的Problem-B问题的解决方案。当给定整数n时,需构建一个数组,条件是相邻元素之和等于所有元素之和,且数组不包含0。文章指出,对于n=2的情况有明显解,而对于n为奇数的情况,可以通过特定比例关系构造数组,偶数情况则使用1和-1交替的方式满足条件。
摘要由CSDN通过智能技术生成

Problem - B - Codeforces

题目大意:给出一整数n,要求输出一个长为n的数组,使得任意两个相邻数的和都等于所有数的和,且数组中不能出现0

2<=n<=1000

思路:n=2时:显然任意两个数都满足条件

n=3时:a_{1}+a_{2}=a_{2}+a_{3} \Rightarrow a_{1}=a_{3} ; a_{1}+a_{2}=a_{1}+a_{2}+a_{3}\Rightarrow a_{3}=0;因为不能有数等于0,所以没有合法数组

n=4时:同上可以得出a_{1}=a_{3};a_{2}=a_{4};又由a_{1}+a_{2}=a_{1}+a_{2}+a_{3}+a_{4}\Rightarrow a_{3}+a_{4}=0可知每相邻两个数相反,间隔一个数相等,所以让数组为1,-1,1-1即可,n=6,8,10...时同理,

n=5时:间隔一个数相等的结论依然成立,然后又有a_{1}+a_{2}=a_{1}+a_{2}+a_{3}+a_{4}+a_{5}\Rightarrow a_{3}+a_{4}+a_{5}=0 \Rightarrow a_{4}=-2a_{3}=-2a_{5},所以相邻两个数是-2/1倍的关系,间隔一个数相等,n=7时,同理可得相邻两个数是-3/2倍,n=9时是-4/3倍,可以发现分母=(n-1)/2-1,分子等于分母+1,所有构造出的数组就是(n-1)/2-1,-(n-1)/2,(n-1)/2-1...

//#include<__msvc_all_public_headers.hpp>
#include<bits/stdc++.h>
using namespace std;
int main()
{
	cin.tie(0);
	ios::sync_with_stdio(false);
	int t;
	cin >> t;
	while (t--)
	{
		int n;
		cin >> n;
		if (n == 3)
		{//n=3时没有可行解
			cout << "NO" << endl;
		}
		else if (n & 1)
		{//其他奇数时
			cout << "YES" << endl;
			for (int i = 1; i <= n - 1; i += 2)
			{
				cout << (n - 1) / 2 - 1 << " " << -(n - 1) / 2 << " ";
			}
			cout << (n - 1) / 2 - 1 << endl;
		}
		else
		{//偶数时
			cout << "YES" << endl;
			for (int i = 1; i <= n; i += 2)
			{
				cout << "1 -1 ";
			}
			cout << endl;
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

timidcatt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值