UVA - 729 The Hamming Distance Problem

来源:互联网 发布:子域名怎么看 编辑:程序博客网 时间:2024/06/05 11:32

题目大意:给出长度 N 和 Hamming 距离 H,求所有符合的字符串。符合的个数是 C(N,H)

解题思路:其实就是一个长度为 N 的字符串里面有 H 个 1,其余都是 0,求这个字符串的全排列,和UVA - 10098 Generating Fast 一样。

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>using namespace std;int s[20], ans[20];int n, h;bool cmp(char a, char b) {    return a < b;}void print(int cur) {    if (cur == n) {        for (int i = 0; i < n; i++)            cout << ans[i];        cout << endl;    }    else for (int i = 0; i < n; i++) {        if (!i || s[i] != s[i-1]) {            int c1 = 0, c2 = 0;            for (int j = 0; j < cur; j++)                if (s[i] == ans[j]) c1++;            for (int j = 0; j < n; j++)                if (s[i] == s[j]) c2++;            if (c1 < c2) {                ans[cur] = s[i];                print(cur+1);            }        }    }}int main() {    int T;    scanf("%d", &T);    while (T--) {        memset(s, 0, sizeof(s));        memset(ans, 0, sizeof(ans));        scanf("%d%d", &n, &h);        for (int i = 0; i < h; i++)            s[i] = 1;        sort(s, s+n, cmp);        print(0);        if (T) cout<<endl;    }return 0;}

STL:

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>using namespace std;int s[20];int n, h;int main() {    int T;    scanf("%d", &T);    while (T--) {        memset(s, 0, sizeof(s));        scanf("%d%d", &n, &h);        for (int i = n-1; i >= n-h; i--)            s[i] = 1;        for (int i = 0; i < n; i++)            cout<<s[i];        cout<<endl;        while (next_permutation(s,s+n)) {            for (int i = 0; i < n; i++)                cout<<s[i];            cout<<endl;        }        if (T) cout<<endl;    }return 0;}
0 0
原创粉丝点击