Harmonic Value Description
阿新 • • 發佈:2018-12-09
題目也就是說找出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"); } }