1. 程式人生 > >Harmonic Value Description

Harmonic Value Description

題目也就是說找出1--n中的第k小value的排列,value的計算方式為相鄰兩個數的gcd,暴力的話肯定會超時,再仔細想想,第k曉得排列有多種,最小的排列肯定是相鄰兩個數互質,

每相鄰兩個數的gcd都等於1,於是,1--n的順序排列正好滿足,我們再找第二小的,我們只要保證排列中一組數的gcd等於2就行了,第三小的一組數gcd等於3,因此只需要一開始輸出2k,k,之後再輸出順序的數就好了。AC程式碼如下

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    int n,th;
    scanf("%d",&t);
    for(int u=1;u<=t;u++)
    {
        scanf("%d%d",&n,&th);
        printf("Case #%d: %d %d",u,2*th,th);

        for(int i=th-1;i>=1;i--)
        {
            printf(" %d",i);
        }
        for(int i=th+1;i<=n;i++)
        {
            if(i!=2*th)
                printf(" %d",i);
        }
        printf("\n");
    }
}