Codeforces Round #447 (Div. 2) C. Marco and GCD Sequence 构造

来源:互联网 发布:python np.max 编辑:程序博客网 时间:2024/05/17 06:19

题意:

有一段序列,对他的所有的子序列的gcd放入set里面,然后把这个set给你,问是否合法,若合法,把原序列构造出来

思路:

开始我想错了,以为任意的连续子序列的gcd一定存在于set中,其实不然,例如原序列(2,12,2,18)-》(2,12,18)

但是我们能确定的是,对于给定的set,只要最小的那个数是所有数的因子,那么我们就可以构造一个满足条件的序列也就是原序列;

把最小的那个数插到给定序列中间就行了;


#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<cmath>#include<set>#include<queue>#include<stack>#include<map>#define PI acos(-1.0)#define in freopen("in.txt", "r", stdin)#define out freopen("out.txt", "w", stdout)using namespace std;typedef long long ll;typedef unsigned long long ull;const int maxn = 1000 + 7, maxd = 670000 + 7, mod = 1e9 + 7;const int INF = 0x7f7f7f7f;int n;ll a[maxn];int main() {    scanf("%d", &n);    for(int i = 1; i <= n; ++i) {        scanf("%lld", &a[i]);    }    int i;    for(i = 1; i <= n; ++i)        if(a[i] % a[1]) break;    if(i <= n) puts("-1");    else {        printf("%d\n%lld", n*2-1, a[1]);        for(int i = 2; i <= n; ++i)            printf(" %lld %lld", a[1], a[i]);    }    return 0;}



阅读全文
1 0
原创粉丝点击