HDU 4712 Hamming Distance(随机算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4712
题目大意:任意两个数按位异或后二进制中含1的个数被称为海明距离,给定n个数,求出任意其中两个最小的海明数,输入是16进制。
分析:用随机数来模拟,加srand()函数,放置产生伪随机数。代码有2个。
代码1:
1 # include<iostream> 2 # include<cstdio> 3 # include<cstring> 4 # include<ctime> 5 # include<cstdlib> 6 # define INF 0x3f3f3f3f 7 8 using namespace std; 9 10 int cmp[16][16]; 11 char data[100005][6]; 12 13 int solve(int q,int w) 14 { 15 int a,b,ret=0; 16 for(int i=0; i<5; i++) 17 { 18 char x = data[q][i]; 19 char y = data[w][i]; 20 if(x>='0' && x<='9') 21 a = x-'0'; 22 else 23 a = x-'A' + 10; 24 if(y>='0' && y<='9') 25 b = y-'0'; 26 else 27 b = y-'A' + 10; 28 ret += cmp[a][b]; 29 } 30 return ret; 31 } 32 int main() 33 { 34 int i,j; 35 for(i=0; i<16; i++) 36 { 37 for(j=0; j<16; j++) 38 { 39 int ans=0; 40 int tmp = i^j; 41 for(int k=0; k<4; k++) 42 if((1<<k) & tmp) 43 ans ++; 44 cmp[i][j] = ans; 45 } 46 } 47 48 int T,n; 49 scanf("%d",&T); 50 while(T--) 51 { 52 scanf("%d",&n); 53 for(i=1; i<=n; i++) 54 scanf("%s",data[i]); 55 int ans = INF; 56 srand((unsigned)time(NULL)); 57 for(i=1; i<=60000; i++) 58 { 59 int a = rand()%n + 1; 60 int b = rand()%n + 1; 61 if(a==b) 62 b= b%n+1; 63 int tmp = solve(a,b); 64 if(tmp < ans) 65 ans = tmp; 66 } 67 printf("%d\n",ans); 68 } 69 return 0; 70 }
代码2:
1 # include<iostream> 2 # include<cstdio> 3 # include<cstring> 4 # include<ctime> 5 # include<cstdlib> 6 # define INF 0x3f3f3f3f 7 8 using namespace std; 9 10 int data[100005]; 11 12 int get_one(int x) 13 { 14 int ret = 0; 15 while(x) 16 { 17 ret ++; 18 x = x&(x-1); 19 } 20 return ret; 21 } 22 int main() 23 { 24 srand((unsigned)time(NULL)); 25 int T,n,i; 26 scanf("%d",&T); 27 while(T--) 28 { 29 scanf("%d",&n); 30 for(i=0; i<n; i++) 31 scanf("%x",&data[i]); 32 int ans = INF; 33 for(i=100005; i>=0; i--) //好奇怪,这里从前往后循环返回WA 34 { 35 int a = rand()%n ; 36 int b = rand()%n ; 37 if(a != b) 38 ans = min(ans,get_one(data[a]^data[b])); 39 } 40 printf("%d\n",ans); 41 } 42 return 0; 43 }
HDU 4712 Hamming Distance(随机算法)相关推荐
- 2013杭电warm up1 hdu 4712 Hamming Distance
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4712 首先,算汉明距离就是二进制异或以后的1的个数,统计1的个数用x&=x-1很快很神奇. ...
- C++ hamming distance汉明距离算法(附完整源码)
hamming distance汉明距离的算法 hamming distance汉明距离的算法的完整源码(定义,实现,main函数测试) hamming distance汉明距离的算法的完整源码(定义 ...
- HDU4712 Hamming Distance (随机化)
link:http://acm.hdu.edu.cn/showproblem.php?pid=4712 题意:给1e5个数字,输出这些数中,最小的海明码距离. 思路:距离的范围是0到20.而且每个数的 ...
- C#LeetCode刷题之#461-汉明距离(Hamming Distance)
问题 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目. 给出两个整数 x 和 y,计算它们之间的汉明距离. 注意:0 ≤ x, y < 231. 输入: x = 1, y = ...
- Hamming distance - 汉明距离
Hamming distance - 汉明距离 1. Hamming distance //====================================================== ...
- LeetCode(191 461):位1的个数 Number of 1 Bits 汉明距离 Hamming Distance(Java)
2019.9.14 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新) github:https://github.com/ChopinXBP/LeetCode-Babel 之前在 ...
- Levenshtein distance 编辑距离算法
这几天再看 virtrual-dom,关于两个列表的对比,讲到了 Levenshtein distance 距离,周末抽空做一下总结. Levenshtein Distance 介绍 在信息理论和计算 ...
- [PKUWC2018]随机算法
题意:https://loj.ac/problem/2540 给定一个图(n<=20),定义一个求最大独立集的随机化算法 产生一个排列,依次加入,能加入就加入 求得到最大独立集的概率 loj25 ...
- Leetcode 461. Hamming Distance JAVA语言
The Hamming distance between two integers is the number of positions at which the corresponding bits ...
最新文章
- 移动端IOS和androi及浏览器js判断[转载]
- Consul + Nginx实现自动扩容平台
- 如何用jlink+jflash烧写stm32f103CB的option bytes 和程序
- 动态生成控件的消息处理
- canvas学习绘制扇形
- JAVA并发包内容_java并发包
- mysql 在线备份脚本,MySQL备份脚本
- Bailian2939 玩游戏【模拟】
- 南阳理工acm,鸡兔同笼
- Android的Gallery3D模块介绍
- 4G+5G多卡聚合(弱网通信)路由器视频传输最佳选择
- Modelica学习笔记2
- 椭圆函数与模函数(2012.10出版)(2013-01-16 09:34:57)
- React:栈调和(Reconciliation)
- 智能家居内网服务器,手把手教你搭建自己的智能家居IOT系统
- Vue和Element第一天
- 微信开发必备工具:利用cpolar在公网上测试本地Web网站或移动应用程序
- 阿里云国际版账号如何申请
- Java Web框架play framework的下载与环境变量配置
- 看我解决Linux下的OTG切换问题