我的做法,多次宽搜,因为后面的搜索扩展的节点会比较少,所以复杂度还是不需要太悲观的,然后加上一开始对答案的估计,用估计值来剪枝,就可以ac了。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. using namespace std;
  6. char a[11];
  7. int key[111111];
  8. int hash[1111111];
  9. int que[2111111];
  10. int front,end;
  11. int ans;
  12. void bfs()
  13. {
  14. while(front<=end)
  15. {
  16. int now=que[front++];
  17. if(hash[now]>=ans) continue;
  18. for(int i=0;i<=19;i++)
  19. {
  20. int to=(now^(1<<i));
  21. if(hash[to]>hash[now]+1)
  22. {
  23. hash[to]=hash[now]+1;
  24. que[++end]=to;
  25. }
  26. }
  27. }
  28. }
  29.  
  30. int cal(int t,int s)
  31. {
  32. int sum=0;
  33. for(int i=0;i<=19;i++)
  34. {
  35. int tmp=key[t]&(1<<i);
  36. int txt=key[s]&(1<<i);
  37. if(tmp^txt)
  38. sum++;
  39. }
  40. return sum;
  41. }
  42.  
  43. int main()
  44. {
  45. // freopen("in.txt","r",stdin);
  46. int T;
  47. scanf("%d",&T);
  48. while(T--)
  49. {
  50. memset(hash,1,sizeof(hash));
  51. ans=33;
  52. int n;
  53. scanf("%d",&n);
  54. for(int i=1;i<=n;i++)
  55. {
  56. for(int j=1;j<=5;j++)
  57. {
  58. scanf("%c",&a[j]);
  59. if(a[j]==' '||a[j]=='\n')
  60. j--;
  61. }
  62. int txt=1,sum=0;
  63. for(int j=1;j<=5;j++)
  64. {
  65. if(a[j]>='0'&&a[j]<='9')
  66. sum+=(a[j]-'0')*txt;
  67. else
  68. sum+=(a[j]-'A'+10)*txt;
  69. txt*=16;
  70. }
  71. key[i]=sum;
  72. }
  73. sort(key+1,key+1+n);
  74. for(int i=1;i<n;i++)
  75. ans=min(ans,cal(i,i+1));
  76.  
  77. for(int i=1;i<=n;i++)
  78. {
  79. ans=min(ans,hash[key[i]]);
  80. front=1,end=0;
  81. que[++end]=key[i];
  82. hash[key[i]]=0;
  83. bfs();
  84. }
  85.  
  86. cout<<ans<<endl;
  87. }
  88. return 0;
  89. }

hdu 4712 Hamming Distance bfs的更多相关文章

  1. hdu 4712 Hamming Distance(随机函数暴力)

    http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...

  2. hdu 4712 Hamming Distance 随机

    Hamming Distance Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  3. hdu 4712 Hamming Distance ( 随机算法混过了 )

    Hamming Distance Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  4. HDU 4712 Hamming Distance(随机算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4712 题目大意:任意两个数按位异或后二进制中含1的个数被称为海明距离,给定n个数,求出任意其中两个最小 ...

  5. HDU 4712 Hamming Distance(随机算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4712 解题报告:输入n个数,用十六进制的方式输入的,任意选择其中的两个数进行异或,求异或后的数用二进制 ...

  6. hdu 4712 Hamming Distance(随机数法)

    d.汉明距离是使用在数据传输差错控制编码里面的,汉明距离是一个概念,它表示两个(相同长度)字对应位不同的数量, 我们以d(x,y)表示两个字x,y之间的汉明距离.对两个字符串进行异或运算,并统计结果为 ...

  7. 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 ...

  8. HDU 472 Hamming Distance (随机数)

    Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) To ...

  9. HDU 4217 Hamming Distance 随机化水过去

    Hamming Distance Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

随机推荐

  1. uva 10271 Chopsticks(dp)

    题目连接:10271 - Chopsticks 题目大意:给出m和n, 然后给出n根筷子从小到大给出, 现在要从这n根筷子中选出m + 8组筷子, 每组筷子包括三根, 现在要求所有m + 8组每组筷子 ...

  2. windows下各个浏览器用html5进行h.264大视频播放的性能对比说明

    最近在调查windows下哪种浏览器进行大视频播放时候稳定性比较高. 举h.264的4g的视频为例. 选用的浏览器有ie10,firefox,chrome.(因为opera不支持h.264所以没有考虑 ...

  3. myeclipse自动生成注释

    myeclipse自动生成注释 在使用Eclipse编写Java代码时,自动生成的注释信息都是按照预先设置好的格式生成的,例如其中author的属性值. 我们可以在Eclipse中进行设置自己希望显示 ...

  4. 再造 “手机QQ” 侧滑菜单(三)——视图联动

    代码示例:https://github.com/johnlui/SwiftSideslipLikeQQ 本 文中,我们将一起使用 UINavigationController 来管理主视图,并实现点击 ...

  5. muduo 与 libevent2 吞吐量对照

    libevent 是一款很好用的 C 语言网络库,它也採用 Reactor 模型,正好能够与 muduo 做一对照. 本文用 ping pong 測试来对照 muduo 和 libevent2 的吞吐 ...

  6. linux 单网卡绑定两个ip

    一.ubuntu系统: #vi /etc/network/interfaces  OR  $ sudo vi /etc/network/interfaces Modify as follows: au ...

  7. CentOS 如何安装git server + Gitolite 【配置不成功需要再测试2015-8-20】

    安装git 关于安装git  可以参考 http://gitolite.com/gitolite/install.html 里面有官方的介绍 1. Git 的工作需要调用 curl,zlib,open ...

  8. Qt 学习之路 2(75):线程总结

    前面我们已经详细介绍过有关线程的一些值得注意的事项.现在我们开始对线程做一些总结. 有关线程,你可以做的是: 在QThread子类添加信号.这是绝对安全的,并且也是正确的(前面我们已经详细介绍过,发送 ...

  9. poj 1155 TELE (树形背包dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接: poj-1155 题意 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构, ...

  10. Android事件模型之interceptTouchEvnet ,onTouchEvent关系正解

    首先,看Android的官方文档正解 onInterceptTouchEvent()与onTouchEvent()的机制: 1. down事件首先会传递到onInterceptTouchEvent() ...