hdu 4712 Hamming Distance bfs
我的做法,多次宽搜,因为后面的搜索扩展的节点会比较少,所以复杂度还是不需要太悲观的,然后加上一开始对答案的估计,用估计值来剪枝,就可以ac了。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char a[11];
int key[111111];
int hash[1111111];
int que[2111111];
int front,end;
int ans;
void bfs()
{
while(front<=end)
{
int now=que[front++];
if(hash[now]>=ans) continue;
for(int i=0;i<=19;i++)
{
int to=(now^(1<<i));
if(hash[to]>hash[now]+1)
{
hash[to]=hash[now]+1;
que[++end]=to;
}
}
}
} int cal(int t,int s)
{
int sum=0;
for(int i=0;i<=19;i++)
{
int tmp=key[t]&(1<<i);
int txt=key[s]&(1<<i);
if(tmp^txt)
sum++;
}
return sum;
} int main()
{
// freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
memset(hash,1,sizeof(hash));
ans=33;
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=5;j++)
{
scanf("%c",&a[j]);
if(a[j]==' '||a[j]=='\n')
j--;
}
int txt=1,sum=0;
for(int j=1;j<=5;j++)
{
if(a[j]>='0'&&a[j]<='9')
sum+=(a[j]-'0')*txt;
else
sum+=(a[j]-'A'+10)*txt;
txt*=16;
}
key[i]=sum;
}
sort(key+1,key+1+n);
for(int i=1;i<n;i++)
ans=min(ans,cal(i,i+1)); for(int i=1;i<=n;i++)
{
ans=min(ans,hash[key[i]]);
front=1,end=0;
que[++end]=key[i];
hash[key[i]]=0;
bfs();
} cout<<ans<<endl;
}
return 0;
}
hdu 4712 Hamming Distance bfs的更多相关文章
- hdu 4712 Hamming Distance(随机函数暴力)
http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...
- hdu 4712 Hamming Distance 随机
Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- hdu 4712 Hamming Distance ( 随机算法混过了 )
Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- HDU 4712 Hamming Distance(随机算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4712 题目大意:任意两个数按位异或后二进制中含1的个数被称为海明距离,给定n个数,求出任意其中两个最小 ...
- HDU 4712 Hamming Distance(随机算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4712 解题报告:输入n个数,用十六进制的方式输入的,任意选择其中的两个数进行异或,求异或后的数用二进制 ...
- hdu 4712 Hamming Distance(随机数法)
d.汉明距离是使用在数据传输差错控制编码里面的,汉明距离是一个概念,它表示两个(相同长度)字对应位不同的数量, 我们以d(x,y)表示两个字x,y之间的汉明距离.对两个字符串进行异或运算,并统计结果为 ...
- hduoj 4712 Hamming Distance 2013 ACM/ICPC Asia Regional Online —— Warmup
http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...
- HDU 472 Hamming Distance (随机数)
Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) To ...
- HDU 4217 Hamming Distance 随机化水过去
Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
随机推荐
- 基于visual Studio2013解决C语言竞赛题之0601判断素数函数
题目 解决代码及点评 //编写一函数判断一个数是否为素数 #include<stdio.h> #include <stdlib.h> # ...
- Sql 增加字段(有些只能在ORACLE中运行)
增加字段 alter table table_name add column_name varchar(200) 删除字段 ALTER TABLE table_NAME DROP COLUMN col ...
- freemarker报错之八
1.错误描写叙述 freemarker.core.ParseException: Encountered "string" at line 21, column 21 in typ ...
- 交换机Trunk端口配置
本文为转发,简单明了,我喜欢. Trunk端口的配置步骤如下: 一 组网需求: 1.SwitchA与SwitchB用trunk互连,相同VLAN的PC之间可以互访,不同VLAN的PC之间禁止互访: 2 ...
- ZOJ 3483 简单if-else
提醒:答案要约分,不然会错! #include<iostream> #include<cstdio> #include<cstring> #include<a ...
- Fedora20安装完Nvidia后启动一直黑屏解决办法。
安装完Fedora20后,把Nvidia驱动装上后重起机器一直黑屏时,切换到命令行下:Alt+F2 登陆上去,然后直接更新: su -c ‘yum update’ ,再重起就OK了.
- SRAM,SDRAM,网卡
SRAM,SDRAM,网卡有地址总线.由cpu统一编址. NAND flash没有地址总线. 因 此有这两者寻址方式不同. 字符设备驱动程序的框架. 驱动程序 1.有led.read,led.writ ...
- hdu1172猜数字
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1172 题目 猜数字 Time Limit: 20000/10000 MS (Java/Others) ...
- PHP函数详细剖析之rtrim函数 By ACReaper
string rtrim ( string $str [, string $charlist ] ) 这个函数很好理解.r表示右边.trim表示修剪.即右边修剪.默认修剪字符str右边的字符.默认修剪 ...
- 【Cocos2d-x】截图分享功能
Cocos2d-x截图实现 图片将会保存在data/data/包名/files文件夹下. Android下分享一张图片 linux系统下的文件权限 普通情况下android下的每个应用程序都是一个独立 ...