版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Nightmare_ak/article/details/78583458
题目链接:http://codeforces.com/contest/894/problem/C
解题思路:所有数的gcd一定是最小的,且要与第一个数相同,如果不相同,输出-1,如果相同,在原来的输入中每间隔插入最小的数,那么单点gcd可以取到每个输入值,区间gcd都是最小值
AC代码:
#include<cstdio>
using namespace std;
const int MAXN = 1000 + 5;
int getdata[MAXN];
int gcd(int a, int b)
{
return b == 0 ? a : gcd(b, a%b);
}
int main()
{
int n;
scanf("%d", &n);
int allgcd;
for (int i = 0;i < n;i++)
{
scanf("%d", getdata + i);
if (i == 0)
allgcd = getdata[i];
else
allgcd = gcd(allgcd, getdata[i]);
}
if (allgcd < getdata[0])
puts("-1");
else
{
printf("%d\n", 2 * n);
for (int i = 0;i < n;i++)
printf("%d %d ", getdata[0], getdata[i]);
}
return 0;
}