UVaOJ 729 - The Hamming Distance Problem


——by A Code Rabbit


Description

两个二进制数序列相异或,出来一个新的二进制数序列,这个新的序列中有几个1,就表示两个二进制数序列之间的Hamming距离。

输入N和H,输出长度为N的序列中,这个玩意儿Hamming距离为H的序列,并且输出要按字典序输出。


Types

Brute Force :: Elementary Skills


Analysis

可爱的题目。

和00...0的异或出H个1的序列,明显就是有几个1的序列……

所以求得就是有H个1,长度为N的序列。

更可爱的是,

题目好像为了规范输出而提出,按字典序输出。

这下好玩了,我们把有H个1,长度为N的序列,

看成H个1,N – H个0组成的一个序列。

然后啊,这个序列的所有全排列,正好是题目要求的所有序列……

顺序输出,正好是字典序输出。

由于这个可爱的字典序,可以用next_permutation( )轻松搞定了。


Solution

// UVaOJ 729
// The Hamming Distance Problem
// by A Code Rabbit

#include <algorithm>
#include <cstdio>

using namespace std;

const int LIMITS = 18;

int t;
int n, h;

char str[LIMITS];

bool is_first = true;

int main() {
    scanf("%d", &t);
    while (t--) {
        scanf("%d%d", &n, &h);
        for (int i = 0; i < n; ++i) {
            str[i] = n - i <= h ? '1' : '0';
        }
        str[n] = '\0';
        if (is_first) {
            is_first = false;
        } else {
            printf("\n");
        }
        do {
            puts(str);
        } while (next_permutation(str, str + n));
    }

    return 0;
}









下载PDF

参考资料:无


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值