CodeForces

来源:互联网 发布:淘宝前端 编辑:程序博客网 时间:2024/06/05 11:39

题目链接: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;}