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

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

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

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

然 后 怎 么 构 造 呢 ? 然后怎么构造呢? ?

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

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

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

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

#include 
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 << " ";
	}
}

你可能感兴趣的:(CF1900)