CodeForces - 894C

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

猜你喜欢

转载自blog.csdn.net/Nightmare_ak/article/details/78583458