最小相似度

  题目大意:对于位数相同的两个二进制串,SIM(A,B)为它们的相似度,也就是A^B中0的个数。现在给定一堆串,找出一个T使得max{SIM(S1,T),SIM(S2,T),......,SIM(Sn,T)}最小,不过不用输出T,只需要输出那个最小值

正解应该是FWT,不过没学过,所以也没做出来,而给出的题解的是用bfs做的,还真没想到能够用搜索做,刚开始看也不理解,不过研究了一下还是,挺好理解的。

  首先,也是为什么可以用bfs的一点,就是串的长度最大只到20,也就是220=1048576种状态,可以通过bfs来遍历,那接下来怎么搜,搜什么呢?

  相似度是A^B中0的个数,但0的个数我们并不好控制,但我们可以控制1的个数,也就是不相似度usim。像(1<<i)就是1在第i位,其他位都是0,那么B=A^(1<<i)的话,B就是A不相似度为1的串,而再有C=B(1<<i)并且C!=A的话,C就是A不相似度为2的串,所以我们就可以像bfs一样一层一层的找到最大的不相似度。而对于多个串的话,就是多起点bfs了。

  那为什么这样可以使,答案刚好是跟多个串的不相似度中的最大的呢?像A=111,B=001的话,A的最大不相似的串是000,但A要第3层才能遍历到000,B第1层就能遍历到000,这样像两边往中间逼近一样,能遍历到的最大的那个不相似度就是对于所有串来说的最大不相似度

  最后,再拿长度减去最大不相似度就可以得到最小相似度了,详情见代码

 #include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int N=<<;
char s[];
int n,m,usim[N];
int main()
{
memset(usim,-,sizeof(usim));
scanf("%d%d",&n,&m);
queue<int> q;
for(int i=;i<n;i++)
{
scanf("%s",s);
int x=;
for(int j=;j<m;j++)
x=(x<<)|(s[j]-'');//将串转换成数字表示状态
if(usim[x]==-)
{
usim[x]=;//自己和自己的不相似度为0
q.push(x);//多起点
}
}
int ans=;
while(!q.empty())
{
int x=q.front();
q.pop();
if(usim[x]>ans)
ans=usim[x];//找到最大不相似度
for(int i=;i<m;i++)
{
int y=x^(<<i);//y是x第i位取反的结果
if(usim[y]==-)
{
usim[y]=usim[x]+;//所以y与起点串的不相似度就是x的+1
q.push(y);
}
}
}
printf("%d\n",m-ans);
return ;
}

再偷懒就就就自己打自己

最新文章

  1. jmeter录制移动APP脚本
  2. 为什么很多APP要有启动页面
  3. 常用的工具类4-IP类
  4. jquery: json树组数据输出到表格Dom树的处理方法
  5. C#浅拷贝与深拷贝区别
  6. Git使用之设置SSH Key
  7. debian和ubuntu的sh dash bash
  8. A股市场各行业龙头股一览表
  9. 【Oracle学习笔记-4】内连接和外连接的区别
  10. Wireshark &quot;The NPF driver isn’t running…&quot;
  11. C++中使用class和structkeyword的不同
  12. 如何做程序猿SOHO它定购家庭赚外快?
  13. ListView 分页 排序、编辑、插入和删除
  14. 现代C++新四大名著及C++学习杂谈
  15. VS2017生成解决方案报错,提示对路径的访问被拒绝
  16. web服务器,验证码,Xftp使用方法
  17. 打包工具webpack安装&#183;Mac
  18. 公用表表达式 (CTE)、递归、所有子节点、sqlserver
  19. iOS 快速排序
  20. Java反序列化漏洞实现

热门文章

  1. 从入门到自闭之Python集合,深浅拷贝(大坑)
  2. 学习实践:使用模式,原则实现一个C++数据库访问类
  3. 怎样使用 v-bind 绑定 html 标签的属性值?
  4. vs2010 回车、退格键等不能用
  5. python之uWSGI和WSGI
  6. umi+antdpro 2.3
  7. BLE 5协议栈-直接测试模式
  8. zabbix 3.2.2 server端(源码包)安装部署 (一)
  9. Cubase如何进行音频移调
  10. 使用VGG16完成猫狗分类