C. Marco and GCD Sequence(构造gcd,隔板思想)

首先整个区间的 g c d gcd 一定是题目给的最小因子

所以题目给的每个因子都应该是最小因子的倍数

否则就会互质,互质最小因子就是1,非法(当然如果最小因子就是1那肯定合法)

? 然后怎么构造呢?

, 这个思路很巧妙,我们利用这个最小因子作为断层

, 先把题目给的因子抄下来,然后用最小因子插入在这些数中间

2 g c d 这样任何大于等于2的区间的gcd必定是最小因子

1 长度等于1的区间已经包含了题目给的所有因子了

#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
int n,a[maxn],minn=1e9,flag;
int main()
{
	cin >> n;
	for(int i=1;i<=n;i++)
	{
		cin >> a[i];
		minn=min( minn,a[i] );
	}
	for(int i=1;i<=n;i++)
		if( a[i]%minn!=0 )	flag=1;
	if( flag )	cout << "-1";
	else
	{
		cout << n*2 << endl;
		for(int i=1;i<=n;i++)
			cout << a[i] << " " << minn << " ";
	}
}

猜你喜欢

转载自blog.csdn.net/jziwjxjd/article/details/107876224
gcd