题目

传送门

算法

以下描述都举这个例子:\(x\)是\(11\),\(y\)是\(5\)。

算法1

把\(x\)和\(y\)化成二进制,最多\(10\)位,那么\(x=1011_2\),\(y=0101_2\)。比较它们不同位,把不同位最低位(最大是\(9\))和\(x\)是多少告诉B,上面的例子要告诉B:第\(2\)位不同,\(x\)第二位为\(1\)。那么,\(H_{max}=9*2=18\)。

算法2

仍化成二进制,这次告诉B的是:不同位且\(x\)的那一位为\(0\)的最低位,如果没有,容易知道\(x\)的\(0\)的个数不等于\(y\)的\(0\)的个数,那么这里把\(x\)的\(0\)的个数和\(x\)的\(1\)的个数取最小值(最大是\(5\))告诉B。那么\(H_{max}=10 +5=15\)。

算法3

对于每对\((x,y)\),A都要说出一个\(H\),那么就可以把每对\((x,y)\)分为若干组,使得在同一组(看作集合\(S\))内这种情况不会发生:存在\(a,b,c\in S\),有\((a,b)\)和\((c,a)\)。

好吧,怎样分组我还真不知道。

算法4——解答

前面都是我乱想的,其实算法3是从A出发,解答是从B出发:对于每对\((q,H)\),B都要说yesno。那么设集合\(S_q={H_1,H_2,...H_m}\),如果\(H\in S_q\)那么就回答yes,否则no

对于A来说,如果有\(x,y\),那么他可以告诉B:\(\forall H \in S_x \setminus S_y\),这样子,我们就需要保证任意集合没有包含关系。最佳的选择是,从\(12\)个元素里任意选\(6\)个,每种选法作为一个集合,那么我们就可以生成\(C_{12}^6=926>920=N\)个集合了。

想法——结合算法3&算法4

其实算法3和算法4是等价的,只不过算法3应该如何分组我想不出来。

如果算法3的分组方案十分困难,那么就可以出一道很难的题了(2333):这需要考察选出问题转化的能力。

对于\(N=6\)的情况,依照算法4推出算法3的一种分组方案:

行是\(x\)的值,列是\(y\)的值,格子的值是\((x,y)\)属于哪一组。

希望有高人指点一二:按照算法3的思路应该如何分组?

最新文章

  1. 引用MVC源码的小问题
  2. Neutron 理解 (1): Neutron 所实现的虚拟化网络 [How Netruon Virtualizes Network]
  3. bs4 python解析html
  4. [转]jsp与servlet的区别联系
  5. Android Fragment 真正的完全解析(上)
  6. css -- 题目汇总
  7. js实现对身份证校验
  8. IO端口和IO内存的区别 转
  9. 使2个div 在一行上显示
  10. Unity 使用TexturePackerGUI打包图集 Sprite 图片边上有线
  11. python实例编写(1)--浏览器操作,元素操作
  12. Angular CLI: 发布到 GitHub Pages
  13. spark报错解决
  14. vim设置一个tab为4个空格,设置行号
  15. c#词频统计命令行程序
  16. Effective Java 第三版——58. for-each循环优于传统for循环
  17. Java多线程-----线程安全及解决机制
  18. [BUG]自己的bug自己解,记一次在变量使用过程引发的bug
  19. CMFCPropertyGridProperty的使用
  20. 【POJ】1740.A New Stone Game

热门文章

  1. 简简单单C#爬虫小计
  2. MVC DI
  3. BZOJ 1660: [Usaco2006 Nov]Bad Hair Day 乱发节( 单调栈 )
  4. matlab之kmeans聚类用法
  5. CMD获取当前目录的绝对路径
  6. 转:requirejs2.0新特性介绍
  7. perl学习(3) 列表
  8. Fedora 启动 SSH服务
  9. Tilemill + tilestream + mapbox.js 自制地图
  10. 飘逸的python - 简单探索time模块