codeforces 894C

(簡單構造題)

題意:讓你構造一個序列,使得對於所有1<=i<=j<=n 而言的這些gcd(ai,aa+1,...aj) 都在題目給定的輸入數字中。

思路:由於所有gcd() 的組合都給定了,那麼對於i=j 的這些gcd 就肯定爲序列中的數字之一,所以構造序列中肯定包含題目中給定的部分數字。然後大膽想,直接讓構造序列包含題目中給定的所有數字可以嗎,答案是可以的,只需要在題目給出的數字基礎上,令相鄰兩個數字之間插入一個gcd(a1,a2,...an) 即可。於是構造序列長度爲2n1
(做題的時候腦殘了,大膽以爲只要包括所有數字就行了,仔細想想還是自己太自信了…自己還沒出幾組數據就敢提交代碼..)

代碼:

#include <cstdio>
#include <cmath>
#include <algorithm>

using namespace std;

int a[1010];

int main() {
    //freopen("test.txt","r",stdin);
    int n; bool flag = 1;
    scanf("%d",&n);
    for(int i=0; i<n; i++) {
        scanf("%d",&a[i]);
        if(i && a[i]%a[0] != 0)
            flag = 0;
    }
    if(flag) {
        printf("%d\n",2*n);
        for(int i=0; i<n; i++)
            printf("%d %d%c",a[i],a[0],i==n?'\n':' ');
    }
    else
        puts("-1");
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章