codeforces 894C Marco and GCD Sequence

网友投稿 314 2022-09-02

codeforces 894C Marco and GCD Sequence

​​a dream Marco met an elderly man with a pair of black glasses. The man told him the key to immortality and then disappeared with the wind of time.

When he woke up, he only remembered that the key was a sequence of positive integers of some length n, but forgot the exact sequence. Let the elements of the sequence be a1, a2, …, an. He remembered that he calculated gcd(ai, ai + 1, …, aj) for every 1 ≤ i ≤ j ≤ n and put it into a set S. gcd here means the greatest common divisor.

Note that even if a number is put into the set S twice or more, it only appears once in the set.

Now Marco gives you the set S and asks you to help him figure out the initial sequence. If there are many solutions, print any of them. It is also possible that there are no sequences that produce the set S, in this case print -1.

Input The first line contains a single integer m (1 ≤ m ≤ 1000) — the size of the set S.

The second line contains m integers s1, s2, …, sm (1 ≤ si ≤ 106) — the elements of the set S. It’s guaranteed that the elements of the set are given in strictly increasing order, that means s1 < s2 < … < sm.

Output If there is no solution, print a single line containing -1.

Otherwise, in the first line print a single integer n denoting the length of the sequence, n should not exceed 4000.

In the second line print n integers a1, a2, …, an (1 ≤ ai ≤ 106) — the sequence.

We can show that if a solution exists, then there is a solution with n not exceeding 4000 and ai not exceeding 106.

If there are multiple solutions, print any of them.

Examples Input 4 2 4 6 12 Output 3 4 6 12 Input 2 2 3 Output -1 Note In the first example 2 = gcd(4, 6), the other elements from the set appear in the sequence, and we can show that there are no values different from 2, 4, 6 and 12 among gcd(ai, ai + 1, …, aj) for every 1 ≤ i ≤ j ≤ n.

题意:要求我们构造一个数列 满足这里面所有区间的最小公因数都在这里出现过 并且不会有没有出现过的 首先我把所有gcd做一个gcd求出他们的最大公因数 然后 我判断这个最大公因数 是否在给定的数列中出现 如果没有 则一定是输出-1 否则则我在原数列中没两个中间加一个他们的最大公因数即可

#include#define N 1100inline char gc(){ static char now[1<<16],*S,*T; if (T==S){T=(S=now)+fread(now,1,1<<16,stdin);if (T==S) return EOF;} return *S++;}inline int read(){ int x=0;char ch=gc(); while (ch<'0'||ch>'9') ch=gc(); while (ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=gc();} return x;}inline int gcd(int x,int y){ if (y==0) return x;return gcd(y,x%y);}int a[N],n;int main(){ freopen("cf.in","r",stdin); n=read();int gg=0;bool flag=0; for (int i=1;i<=n;++i) a[i]=read(),gg=gcd(gg,a[i]); for (int i=1;i<=n;++i) if (a[i]==gg) {flag=1;break;} if (!flag) {printf("-1");return 0;}printf("%d\n",(n<<1)-1); for (int i=1;i

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:bzoj 5289 [Hnoi2018]排列
下一篇:bzoj3714 [PA2014]Kuglarz
相关文章

 发表评论

暂时没有评论,来抢沙发吧~