USACO hamming 继续暴搜

USER: Kevin Samuel [kevin_s1]
TASK: hamming
LANG: C++

Compiling...
Compile: OK

Executing...
   Test 1: TEST OK [0.003 secs, 3504 KB]
   Test 2: TEST OK [0.005 secs, 3504 KB]
   Test 3: TEST OK [0.008 secs, 3504 KB]
   Test 4: TEST OK [0.008 secs, 3504 KB]
   Test 5: TEST OK [0.008 secs, 3504 KB]
   Test 6: TEST OK [0.005 secs, 3504 KB]
   Test 7: TEST OK [0.008 secs, 3504 KB]
   Test 8: TEST OK [0.005 secs, 3504 KB]
   Test 9: TEST OK [0.005 secs, 3504 KB]
   Test 10: TEST OK [0.008 secs, 3504 KB]
   Test 11: TEST OK [0.008 secs, 3504 KB]

All tests OK.

YOUR PROGRAM (‘hamming‘) WORKED FIRST TIME!  That‘s fantastic
-- and a rare thing.  Please accept these special automated

congratulations.
/*
ID:kevin_s1
PROG:hamming
LANG:C++
*/

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <cstdlib>
#include <list>
#include <bitset>
#include <cmath>

using namespace std;

//gobal variable====
int N, B, D;
vector<bitset<8> > result;//bitset可以加速
string str = "11111111";
bitset<8> last(str);
int MaxDeep;
//==================

//function==========

int hammingDis(bitset<8> a, bitset<8> b){
	bitset<8> x = a xor b;
	return x.count();
}

bool check(bitset<8> bit){//判断是否与前面的数距离小于D
	for(int i = 0; i < result.size(); i++){
		if(hammingDis(bit, result[i]) < D)
			return false;
	}
	return true;
}

void DFS(int deep, int count){//deep为搜索的数字,count为确认合法数字的个数,从小往大搜
	if(deep > MaxDeep)
		return;
	if(count > N)
		return;
	//
	bitset<8> tmp(deep + 1);
	//int dist = hammingDis(last, tmp);
	if(/*dist >= D*/check(tmp) == true){
		result.push_back(tmp);
		last = tmp;
		DFS(deep + 1, count + 1);
	}
	else{
		DFS(deep + 1, count);
	}
	return;
}
//==================

int main(){
	freopen("hamming.in","r",stdin);
	freopen("hamming.out","w",stdout);
	cin>>N>>B>>D;
	MaxDeep = (int)pow(2.0, (double)B) - 1;
	DFS(-1, 0);
	for(int i = 0; i < N; i++){
		cout<<result[i].to_ulong();
		if(i != N - 1){
			if(i % 10 == 9)
				cout<<endl;
			else
				cout<<" ";
		}
	}
	cout<<endl;
	return 0;
}

USACO hamming 继续暴搜

时间: 2024-10-25 08:16:42

USACO hamming 继续暴搜的相关文章

【HDU-4277】USACO ORZ(暴搜)

直接dfs暴力,不需要减枝, 利用set进行判断重复,hash一下,转化成一个longlong的数保存就好了. #include<cstdio> #include<set> #include<cstring> #include<algorithm> using namespace std; #define MAXD 20 + 5 typedef long long LL; int n; LL array[MAXD]; set<LL>vis; LL

子矩阵(暴搜(全排列)+DP)

子矩阵(暴搜(全排列)+DP) 一.题目 子矩阵 时间限制: 1 Sec  内存限制: 128 MB 提交: 1  解决: 1 [提交][状态][讨论版] 题目描述 给出如下定义: 1. 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵. 例如,下面左图中选取第2.4行和第2.4.5列交叉位置的元素得到一个2*3的子矩阵如右图所示. 9 3 3 3 9 9 4 8 7 4 1 7 4 6 6 6 8 5 6 9 7 4 5 6 1 的

【BZOJ-3033】太鼓达人 欧拉图 + 暴搜

3033: 太鼓达人 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 204  Solved: 154[Submit][Status][Discuss] Description 七夕祭上,Vani牵着cl的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员XLk.Poet_shy和lydrainbowcat拯救出来的的applepi.看到两人对太鼓达人产生了兴趣,applepi果断闪

c++20701除法(刘汝佳1、2册第七章,暴搜解决)

20701除法 难度级别: B: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述     输入正整数n,按从小到大的顺序输出所有满足表达式abcde/fghij=n的abcde和fghij,其中a~j恰好为数字0~9的一个排列. 如果没有符合题意的数,输出0.本题所说的五位数可以包括前导0的,如01234在这里也称为五位数. 输入 一个正整数n  输出 若干行,每行包括两个符合要求的五位正整数(每行的两个数先大后小),两数之

[HDU 5135] Little Zu Chongzhi&#39;s Triangles (dfs暴搜)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5135 题目大意:给你n条边,选出若干条边,组成若干个三角形,使得面积和最大.输出最大的面积和. 先将边从小到大排序,这样前面的两条边加起来如果不大于第三条边就可以跳出,这是一个存在性条件. dfs(int idx,int now,int cnt,int nowmax)代表我当前处理的是第idx条边,已经加入边集的有cnt条边,当前的边的长度和为now,组成的最大面积和为nowmax. 暴力枚举每个三

HDU 5012 bfs暴搜

Dice Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 243    Accepted Submission(s): 135 Problem Description There are 2 special dices on the table. On each face of the dice, a distinct number wa

HDU 4284 Travel Folyd预处理+dfs暴搜

题意:给你一些N个点,M条边,走每条边要花费金钱,然后给出其中必须访问的点,在这些点可以打工,但是需要先拿到证书,只可以打一次,也可以选择不打工之直接经过它.一个人从1号点出发,给出初始金钱,问你能不能访问所以的点,并且获得所以证书. 题解:目标是那些一定要访问的点,怎么到达的我们不关心,但是我们关系花费最少的路径,而且到达那个点后是一定要打工的,如果只是经过,那么在求花费最少的路径的时候已经考虑过了. 因此先用Folyd求出各个点直接的最短路径,由于N很小,又只要求出一个解,所以直接dfs暴搜

bzoj 2241: [SDOI2011]打地鼠(暴搜+减枝)

2241: [SDOI2011]打地鼠 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 1098  Solved: 691 [Submit][Status][Discuss] Description 打地鼠是这样的一个游戏:地面上有一些地鼠洞,地鼠们会不时从洞里探出头来很短时间后又缩回洞中.玩家的目标是在地鼠伸出头时,用锤子砸其头部,砸到的地鼠越多分数也就越高. 游戏中的锤子每次只能打一只地鼠,如果多只地鼠同时探出头,玩家只能通过多次挥舞锤子的方

Sicily1317-Sudoku-位运算暴搜

最终代码地址:https://github.com/laiy/Datastructure-Algorithm/blob/master/sicily/1317.c 这题博主刷了1天,不是为了做出来,AC之后在那死磕性能... 累积交了45份代码,纪念一下- - 以上展示了从1.25s优化到0.03s的艰苦历程... 来看题目吧,就是一个数独求解的题: 1317. Sudoku Constraints Time Limit: 10 secs, Memory Limit: 32 MB Descript