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

参考资料:无


你可能感兴趣的:(UVaOJ 729 - The Hamming Distance Problem)