Codeforces 622D Optimal Number Permutation(構造)

題目鏈接:

http://codeforces.com/contest/622/problem/D

題目大意:

給出1~n的數字,每個數字出現2次。現在重新排列他們,使得能夠最小。

範圍:

n<=5*10^5。

思路:

對於n來說,有n-n=0,所以n的位置可以任意擺放。現在要使得s最小,我們就考慮構造一個序列,使得這邊的每一項都是0。

先對n進行分類:

1.n爲偶數的時候,對於1這類奇數來說,中間就有偶數個數,例如n=4時,就是1331,然後偶數的時候就是會多出一個數,就用n來補。

2.n爲奇數的時候,兩者反一下。

代碼:

#include<stdio.h>
#include<string.h>
int main()
{
    int n,i,j,k;
    while(~(scanf("%d",&n)))
    {
        if(n%2){
            for(i=1;i<=n/2;i++)
                printf("%d ",2*i-1);
            printf("%d ",n);
            for(i=n/2;i>=1;i--)
                printf("%d ",2*i-1);
            for(i=2;i<n;i+=2)
                printf("%d ",i);
            for(i=n-1;i>=2;i-=2)
                printf("%d ",i);
            printf("%d\n",n);
        }
        else {
            for(i=1;i<n;i+=2)
                printf("%d ",i);
            for(i=n-1;i>=1;i-=2)
                printf("%d ",i);
            for(i=2;i<n;i+=2)
                printf("%d ",i);
            printf("%d ",n);
            for(i=n-2;i>=2;i-=2)
                printf("%d ",i);
            printf("%d\n",n);
        }

    }
     return 0;
}


發佈了235 篇原創文章 · 獲贊 4 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章