题目

Description

对于二进制串a,b,他们之间的海明距离是指两个串异或之后串中1的个数。异或的规则为:

0 XOR 0 = 0

1 XOR 0 = 1

0 XOR 1 = 1

1 XOR 1 = 0

计算两个串之间的海明距离的时候,他们的长度必须相同。现在我们给出N个不同的二进制串,请计算出这些串两两之间的最短海明距离。

Input

第一个数字是整数T(T≤10),代表数据的组数。

接下来有T组数据,每组数据的第一行是一个正整数N,代表不同的二进制串的个数。接下来是N行,每行都是一个二进制串(长度是5)。我们用数字(0-9)和字符(A-F)来表示这个二进制串。它代表这个二进制串的16进制码。例如,“12345”代表的二进制串为“00010010001101000101”。

Output

对于每个数据,请输出一个整数,即答案值。

Sample Input

2
2
12345
54321
4
12345
6789A
BCDEF
0137F

Sample Output

6
7

Data Constraint

对于30%的数据有1≤N≤100

对于全部数据,有1≤N≤100000

分析

  • 刚开始这道题,我是用快排去跑
  • 后来发现不行,打了个n^2
  • 然后水了个50
  • 后来我直接用1-2^20*n去跑,发现直接炸
  • 正确解法:
  • 我们要利用1的个数直接去形成数
  • 这样找到一个后就直接可以输出了

代码

 1 #include<iostream>
 2 #include<cmath>
 3 #include<algorithm>
 4 #include<cstdio>
 5 #include<cstring>
 6 #define N 10000000
 7 #define ll long long
 8 using namespace std;
 9 string s;
10 int a[N];
11 int n;
12 int h[N];
13 ll tran(string s)
14 {
15     ll i,a,b;
16     double k,h=0;
17     a=s.length();
18     b=a-1;
19     for (i=0;i<=a;i++)
20     {
21        if (s[i]<='9'&&s[i]>='0')
22          s[i]=s[i]-'0';
23        else if (s[i]<='F'&&s[i]>='A')
24           s[i]=s[i]-'A'+10;
25        k=s[i]*pow(16, b);
26        h+=k;
27        b--;
28     }
29     return h;
30 }
31 bool dfs(int x,int y,int l,int r)
32 {
33     if (l==r+1)
34     {
35         for (int i=1;i<=n;i++)
36             if (h[a[i]^x]==1) return 1;
37         return 0;
38     }
39     for (int i=y+1;i<=20;i++)
40     {
41         int m=(1<<i);
42         if (dfs(x+m,i,l+1,r)) return 1;
43     }
44     return 0;
45 }
46 int main ()
47 {
48     int T;
49     cin>>T;
50     while (T)
51     {
52         memset(h,0,sizeof(h));
53         T--;
54         cin>>n;
55         for (int i=1;i<=n;i++)
56         {
57             cin>>s;
58             int t=tran(s);
59             a[i]=t;
60             h[a[i]]=1;
61         }
62         int ans=1;
63         while (1)
64           if (dfs(0,-1,1,ans)) break;
65           else ans++;
66         cout<<ans<<endl;
67     }
68 }

转载于:https://www.cnblogs.com/zjzjzj/p/11112078.html

JZOJ 3231. 海明距离相关推荐

  1. JZOJ 5489. 【清华集训2017模拟11.28】海明距离

    Description 设有一长度为n的初始每个位置均为0的序列A.再给定一个长度为n的01序列B. 有Q个特殊的区间[li,ri],你可以选择将A中li到ri这些位置都变为1,当然你可以选择不变. ...

  2. 【JZOJ A组】海明距离

    Description 对于二进制串a,b,他们之间的海明距离是指两个串异或之后串中1的个数.异或的规则为: 0 XOR 0 = 0 1 XOR 0 = 1 0 XOR 1 = 1 1 XOR 1 = ...

  3. Matlab计算两集合间的海明距离

    一.问题描述 B1[1 2 3 4 5 6 7 8 9] B2[12 13 14 21 31 41 51  1 1 81 1 1] 两个十进制矩阵,行数不一样,分别是n1和n2,列数必须一致,为nwo ...

  4. 【转】海量数据相似度计算之simhash和海明距离

    2019独角兽企业重金招聘Python工程师标准>>> 通过 采集系统 我们采集了大量文本数据,但是文本中有很多重复数据影响我们对于结果的分析.分析前我们需要对这些数据去除重复,如何 ...

  5. Java实现海明距离简单计算

    文本相似度比较有很多方法,如余弦夹角算法.欧式距离.Jaccard相似度.最长公共子串.编辑距离等,海明距离是其中之一. 在信息编码中,两个合法代码对应位上编码不同的位数称为码距,又称海明距离. n位 ...

  6. 海量数据,海明距离高效检索(smlar)

    (1)什么是海明距离两个码字的对应比特取值不同的比特数称为这两个码字的海明距离.在一个有效编码集中,任意两个码字的海明距离的最小值称为该编码集的海明距离.举例如下:10101和00110从第一位开始依 ...

  7. 海明距离mysql查询_海量数据,海明距离高效检索(smlar) - 阿里云RDS PosgreSQL最佳实践-阿里云开发者社区...

    标签 PostgreSQL , 海明距离 , smlar , GiST索引 背景 SimHash的应用 通过上面的步骤,我们可以利用SimHash算法为每一个网页生成一个向量指纹,那么问题来了,如何判 ...

  8. mysql 海明距离,golang 实现海明距离 demo

    package main import ("fmt" "math" "strconv" "strings") type ...

  9. 【JZOJ5489】海明距离

    Description 设有一长度为n的初始每个位置均为0的序列A.再给定一个长度为n的01序列B. 有Q个特殊的区间[li,ri],你可以选择将A中li到ri这些位置都变为1,当然你可以选择不变. ...

最新文章

  1. CISCO交换机如何删除 Vlan
  2. 吐血,经过4个小时,终于发现这个可以解决虚拟机ubuntu不能联网的问题
  3. 如何在android模拟器中安装apk软件
  4. Debian操作系统的源配置信息详解--Source.list配置文件详解
  5. (5)通过输入参数(测量数据)构建二维体模型(01)
  6. When should we write our own copy constructor?
  7. 较完整的 bean生命周期
  8. TinaFace: Strong but Simple Baseline for Face Detection论文笔记
  9. HTTP网络劫持的原理与过程、网站被劫持怎么办?
  10. insert into 语句的四种写法
  11. struct所占的内存
  12. 除了屏下无孔全面屏,红魔7系列还有这些黑科技
  13. cad展点kszd小程序_cad实现批量展坐标点方法介绍
  14. Linux群组与用户
  15. 3G单兵构建现代化应急指挥系统
  16. 国内实验室信息化管理现状
  17. 赵长鹏财富蒸发90%,孙正义亏损900亿,最全人类细胞图谱登Science封面,今日更多大新闻在此...
  18. ubuntu 14.04 systemd开机启动方式安装
  19. 使用PE全新安装系统
  20. 考研数学一些不人知的知识

热门文章

  1. 带传动计算机辅助测试系统,基于VisualBasic的V型带传动计算机辅助设计
  2. PyG利用GCN实现Cora、Citeseer、Pubmed引用论文节点分类
  3. java 3d验证码_Java实现验证码具体代码(图片、汉字)
  4. oracle关键字plus,详细介绍ORACLE sqlplus命令 - jack198409的个人空间 - ITPU...
  5. auto uninstaller (autodesk 修复大师) 简体中文版 更新下载地址
  6. 使用SignTool对软件安装包进行数字签名
  7. 网易微专业python爬虫工程师_ai工程师 自然语言处理
  8. idea下载及安装教程(总结)
  9. 史上最短命 Windows 系统!比尔盖茨研发,用过几乎都是差评...
  10. Web网站测试流程和方法