hdoj 5916 Harmonic Value Description(数学, 构造)

题目地址:点击打开链接


题意:

给你N和K(1<=K<2K<=2N),求一个1~2N的排列,使得∑gcd(Ai,Ai+1)恰为

第K小(相等视为相同小)。


思路:

连续的序列,两两之间的gcd一定是1,所以k=1,即最小的就可以直接为1-n直接升序。

当k不为1时,有可能的情况是某两个数之间gcd变成了k,而其他任意的两两gcd任然为1。直接拿这一种情况去构造,简单起见,让第一组gcd变成k,又要让后面的gcd都还为1,我们可以这样构造2*k, k, k-1, k-2...1, k+1, k+2...2*k-1, 2*k+1, 2*k+2...n


用到了两个连续的数的gcd肯定是1这个性质。


代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main(void)
{
    int n, k, t, ca = 1;
    cin >> t;
    while(t--)
    {
        scanf("%d%d", &n, &k);
        printf("Case #%d:", ca++);
        printf(" %d %d", k*2, k);
        for(int i = k-1; i >= 1; i--) printf(" %d", i);
        for(int i = k+1; i <= n; i++)
            if(i != 2*k) printf(" %d", i);
        printf("\n");
    }
    return 0;
}

Harmonic Value Description

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 692    Accepted Submission(s): 405
Special Judge


Problem Description
The harmonic value of the permutation  p1,p2,pn  is
i=1n1gcd(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 ( 1T100 ), which indicates the number of test cases.

For each test case, there is only one line describing the given integers n and k ( 12kn10000 ).
 

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
 

Source
 

Recommend
wange2014


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值