Harmonic Value Description
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 733 Accepted Submission(s): 428
Special Judge
Problem Description
The harmonic value of the permutation p1,p2,⋯pn is
∑i=1n−1gcd(pi.pi+1)
Mr. Frog is wondering about the permutation whose harmonic value is the strictly k-th smallest among all the permutations of [n].
Input
The first line contains only one integer T (1≤T≤100), which indicates the number of test cases.
For each test case, there is only one line describing the given integers n and k (1≤2k≤n≤10000).
Output
For each test case, output one line “Case #x: p1 p2 ⋯ pn”, where x is the case number (starting from 1) and p1 p2 ⋯ pn is the answer.
Sample Input
2 4 1 4 2
Sample Output
Case #1: 4 1 3 2 Case #2: 2 4 1 3
题目大意:给你n和k(1<=k<2k<=n),求一个1~2k的排列,使得∑gcd(Ai,Ai+1)恰为第K小(等视为相同小)。
思路:【构造】这题一看2K<=2N,可能就是构造题。如果1,2,3...2N排列的话∑gcd(Ai,Ai+1)为第1小。
若要∑gcd(Ai,Ai+1)=K,只需要将2K和K提出来,将2K放在开头,K放在第二个,接下来只要满足相邻两个数仍然相差1即可。
只要将K-1~1接在K后面,把K+1~2N接在1后面,去掉2K即可。(2K-1,2K+1为奇数,gcd=1)
//
// Created by Admin on 2017/3/12
//
#include<cstdio>
int main(){
int t,count=0;
scanf("%d",&t);
while(t--){
int n,k;
scanf("%d%d",&n,&k);
printf("Case #%d: %d %d",++count,2*k,k);
for(int i=k-1;i>=1;i--)
printf(" %d",i);
for(int i=k+1;i<2*k;i++)
printf(" %d",i);
for(int i=2*k+1;i<=n;i++)
printf(" %d",i);
printf("\n");
}
return 0;
}