The harmonic value of the permutation
p1,p2,⋯pn
is
Mr. Frog is wondering about the permutation whose harmonic value is the strictly k-th smallest among all the permutations of [n].
∑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].
For each test case, there is only one line describing the given integers n and k ( 1≤2k≤n≤10000 ).
2 4 1 4 2
Case #1: 4 1 3 2 Case #2: 2 4 1 3
:题意说的很清楚,2k <= n;所以不用考虑 ∑i=1n−1gcd(pi.pi+1) 过大,或者说突然增大的情况,因为必然存在最小,第二小,第三小,第k小;
最小时,我们只需要让∑i=1n−1gcd(pi.pi+1) = n-1,第二小时,只需要将某一组的gcd(pi,pi+1)=2即可
同理,继续增加也是一样的;而我们知道,一个偶数和奇数的gcd永远是1,并且相邻的两个偶数之间的gcd
是2,两个相邻的奇数的gcd是1,所以我们只要知道k,就把几个连续的2的倍数放在前面,然后后面的数不
变。#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { int N , n , k; int a[10005] , sum = 0; scanf("%d",&N); while(N--) { scanf("%d%d",&n , &k); memset(a, 0, sizeof(a)); for(int i = 1; i <= k; i++) { a[i*2] = 1; } printf("Case #%d:",++sum); for(int i = 1; i <= n; i++) if(a[i]) printf(" %d",i); for(int i = 1; i <= n; i++) if(!a[i]) printf(" %d",i); printf("\n"); } return 0; }