USACO Section 2.1: Hamming Codes

dfs简单题

 1 /*
 2 ID: yingzho2
 3 PROG: hamming
 4 LANG: C++
 5 */
 6 #include <iostream>
 7 #include <fstream>
 8 #include <string>
 9 #include <map>
10 #include <vector>
11 #include <set>
12 #include <algorithm>
13 #include <queue>
14 #include <cmath>
15 #include <list>
16 #include <cstring>
17 #include <cstdlib>
18 #include <limits>
19 #include <stack>
20
21 using namespace std;
22
23 ofstream fout ("hamming.out");
24 ifstream fin ("hamming.in");
25
26 int N, B, D;
27
28 bool check(int x, vector<int> &ans) {
29     for (int i = 0; i < ans.size(); ++i) {
30         int num = 0;
31         for (int j = 0; j < B; ++j) {
32             if (((x >> j) & 1) != ((ans[i] >> j) & 1)) num++;
33         }
34         if (num < D) return false;
35     }
36     return true;
37 }
38
39
40 void find(vector<int> &ans) {
41     if (ans.size() == N) return;
42     int x = ans[ans.size()-1] + 1;
43     while(ans.size() < N) {
44         if (check(x, ans)) {
45             ans.push_back(x);
46             find(ans);
47         }
48         else x++;
49     }
50 }
51
52 int main()
53 {
54     fin >> N >> B >> D;
55     vector<int> ans;
56     ans.push_back(0);
57     find(ans);
58     int num = 0;
59     while (num < N-1) {
60         fout << ans[num];
61         if (num % 10 == 9) fout << endl;
62         else fout << " ";
63         num++;
64     }
65     fout << ans[N-1] << endl;
66     return 0;
67 }
时间: 2024-10-19 05:57:54

USACO Section 2.1: Hamming Codes的相关文章

【USACO 2.1】Hamming Codes

/* TASK: hamming LANG: C++ URL:http://train.usaco.org/usacoprob2?a=5FomsUyB0cP&S=hamming SOLVE: 找粗一个值最小的n个元素的集合,每个元素都是不超过m位二进制的数,且两两之间二进制位不同的位不小于d. dfs,枚举每一个数,枚举范围:(前一个数,1<<m),每次进入dfs都判断一下当前集合是否满足两两距离不小于d. */ #include<cstdio> int n,m,d; in

Section 2.1.Hamming Codes (hamming)

//题目的链接http://www.nocow.cn/index.php/Translate:USACO/hamming/*[位运算]+[异或操作]*//* ID: zhangsh35 PROG: hamming LANG: C++ */ #include<iostream> #include<math.h> #include<stdio.h> using namespace std; const int MAXN=64; int ham[MAXN]; int tot,

洛谷 P1461 海明码 Hamming Codes

P1461 海明码 Hamming Codes 题目描述 给出 N,B 和 D,要求找出 N 个由0或1组成的编码(1 <= N <= 64),每个编码有 B 位(1 <= B <= 8),使得两两编码之间至少有 D 个单位的“Hamming距离”(1 <= D <= 7).“Hamming距离”是指对于两个编码,他们二进制表示法中的不同二进制位的数目.看下面的两个编码 0x554 和 0x234(0x554和0x234分别表示两个十六进制数): 0x554 = 010

USACO Section 2.1 Healthy Holsteins

/* ID: lucien23 PROG: holstein LANG: C++ */ #include <iostream> #include <fstream> #include <vector> using namespace std; bool compFun(int x, int y) { int temp, i = 0; while (true) { temp = 1 << i; if (temp&x > temp&y) {

洛谷 P1461海明码 Hamming Codes 枚举 搜索

洛谷 P1461海明码 Hamming Codes枚举 搜索 1 #include <bits/stdc++.h> 2 using namespace std ; 3 4 const int N = 11 ; 5 int mx,B,n,D ; 6 int bin[N] ; 7 struct base{ 8 bool f[ N ] ; 9 inline void clear() { 10 for(int i=1;i<N;i++) f[ i ] = 0 ; 11 } 12 inline vo

USACO Section 2.2 Party Lamps

/* ID: lucien23 PROG: lamps LANG: C++ */ /* * 此题的技巧之处就是需要注意到任何button只要按下2的倍数次就相当于没有按 * 所以其实只需要考虑4个按钮,每个按钮是否被有效按下过一次就好 * 直接使用枚举法,一共只有2^4=16种情况 * 对于每种情况需要知道被按下的有效次数(也就是被按下过的按钮数),必须满足 * (C-有效次数)%2=0才行,这样其他次数才能视为无效 * 然后验证各种情况是否符合要求,将符合要求的情况按序输出即可 */ #inc

USACO Section 2.2 Runaround Numbers

/* ID: lucien23 PROG: runround LANG: C++ */ #include <iostream> #include <fstream> #include <cstring> using namespace std; int main() { ifstream infile("runround.in"); ofstream outfile("runround.out"); if(!infile || !

USACO Section 2.2 Preface Numbering

/* ID: lucien23 PROG: preface LANG: C++ */ #include <iostream> #include <fstream> #include <string> #include <map> using namespace std; int main() { ifstream infile("preface.in"); ofstream outfile("preface.out")

USACO Hamming Codes DFS 构造

我还是用了很朴素的暴力匹配A了这题,不得不感叹USACO时间放的好宽... /* ID: wushuai2 PROG: hamming LANG: C++ */ //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler #include <stdio.h> #include <iostream> #include <fstream> #include <cstring>