一大早收到两封来自google的邮件,终于不是thank you开头,读研这段日子收了好多公司的感谢信(微软、大摩、EMC、新思。。。集满七封是不是可以换一个offer?)google的这句Congratulations确实够振奋我心 🙂
Monthly Archives: May 2013
[逻辑题]放下那个坏球!
题目很简单,一共有12个小球,其中有一个的质量和其他不一样,问,如何用一架天平只称3次就找到那个坏球?
分析:12个球,3次,直觉就是4个球为一组,分3组。任意拿8个球出来称一次。有两种结果,平衡,不平衡。
情况一:天平平衡,说明选中的8个球都是好球,那么坏球一定在未选中的4个里。目标缩小到四个,接下来就好办了,从4个中任选两个,然后再拿两个好球出来称一次,若平衡,则坏球在未选中的两个中,不平衡则在选中的两个中;目标缩小到两个,取一个与好球称一次,结果立现,刚好称了三次。
情况二:天平不平衡,说明未选中的4个皆为好球,目标缩小为8,此种情况略复杂。对8个目标球进行编号1-8,并记天平左边盘子为A,右边盘子为B。则第一次称可以表示为A=(1,2,3,4),B=(5,6,7,8)。 假设A<B(因为不平衡,总有一边盘子重,用此记号方便描述,无他)。
第一个关键点来了(我承认我是通过枚举的方式得到的),第二次称重方式为,A=(1,5,6),B=(2,7,0)。0表示好球,因为第一次称已经确定了4个好球。
此回合的结果有三。
A=B:说明坏球在3,4,8中。目标缩小到3个,但是现在只剩一次称的机会,需要确定三个球,貌似是不可能。但是,因为第一次称有额外的信息,即第一次称的结果A<B,说明要么是3,4球中有一个是轻的,要么是8号球重了。那么只需要把3,4球分别放在天平的两端,平衡则8好球是坏球,并且坏球是重的;不平衡则,轻的那端是坏球,并且坏球是轻的。
A<B:说明坏球在1,7中。目标缩小到2个,直接拿个好球来称一次就出结果。
A>B:说明坏球在2,5,6中。目标缩小到3个,类似上面的分析,额外信息是要么5,6中有一个是坏球,并且是重了;要么是2号球轻了。然后称一次5,6即可出结果。
这道题的关键之处在于,要充分利用前一次的信息来完成推理。
++++++++++++++++++++++++分割线++++++++++++++++++++++++++++++
到这里还没有结束,此题有个变种,13个球最少称几次能找到其中的坏球?
答案还是3!
思路如下:任选8个球称一次,若不平衡,目标缩小到8个,然后用上面的思路即可。
若平衡,则目标缩小为未选中的5个球。其实分析发现两次是可以确定5个球的,再次上编号,1,2,3,4,5。
然后 A=(1,2) B=(3,0),若平衡,说明4,5是坏球,目标为2,结果立现。
若不平衡,A<B,说明要么1,2有一个轻球,要么3是重球。称一次1,2即可。
若A>B,说明要么1,2有一个是重球,要么3是轻球,称一次1,2即可。
终于可以歇口气了。。。
4月29开始备战GSoC2013,从100多个组织中海选了8个感兴趣的。包括freeBSD、LFS、Gentoo、LTTng、Tor、Debian、Buildroot、GNU。疯狂的读各个网站上的项目说明,最终把目标锁定到GNU/Hurd。
目标项目是improve the GDB port for GNU Hurd, 对hurd一头雾水,疯狂的看hurd的文档,微内核、Mash、消息传递、exception port、GDB、gdbserver。
每天都奋战到凌晨一两点,累的跟一样,被各种英文文档轮番轰炸了三天,终于艰难的完成了申请报告,刚提交了第一个补丁,终于可以舒口气。
静候结果。