[今天我们思考6]

62 views
Skip to first unread message

陈怀兴

unread,
Apr 17, 2008, 6:38:40 AM4/17/08
to pon...@googlegroups.com
接着来;
还是两个题吧。一个简单的,一个中等难度的。

1.  6个数组成一个串: 1 0 1 0 0 0  。它的首尾是相连的。即我们认为第一个数字与最后一个数字是相邻的。现在,你被允许的操作为每次为相邻两位数字同时加1。问:能否通过若干次这样的操作使得这6个数字最后都相等?如果存在,那么请问需要的最少的操作次数为多少?

2.  一副完整的扑克牌52张(除去大小王)。现在你和同事一起来做一个游戏。游戏的总体流程是这样的:先由一个陌生人A 从一副扑克牌中任选出5张牌。然后A把这选出的5张牌给你,你把这5张牌中留下一张牌,另外4张牌则整齐地叠好放在桌子上。然后,你的同事看了这4张牌之后,就可以知道你留下的那张牌是什么。请问,这是可以做到的吗?如果可以,请问你与你的同事该怎么做才能完成这个游戏?

that is it.
enjoy
 ^-^

陈怀兴

unread,
Apr 17, 2008, 6:51:27 AM4/17/08
to pon...@googlegroups.com
友情感谢pongba为我提供第一题 :-)

2008/4/17 陈怀兴 <sil...@gmail.com>:

coffeecat10

unread,
Apr 17, 2008, 9:13:00 AM4/17/08
to pon...@googlegroups.com
两个都是否吗?

2008/4/17 陈怀兴 <sil...@gmail.com>:



--
lolicon

windstorm

unread,
Apr 17, 2008, 9:19:10 AM4/17/08
to pon...@googlegroups.com
the first shold be no, in my opinion......

I am not sure about the second, thinking though.

2008/4/17 coffeecat10 <zhao...@gmail.com>:

--
web: http://www.forwind.cn
msn: likunarmstrong at hotmail.com

陈怀兴

unread,
Apr 17, 2008, 9:27:37 AM4/17/08
to pon...@googlegroups.com
think hard
:-)

2008/4/17 coffeecat10 <zhao...@gmail.com>:

hyifeng

unread,
Apr 17, 2008, 9:38:51 AM4/17/08
to TopLanguage
第一题不可能
第二题,我的方法可以支持很多的牌,不过事实上可能需要同事的心算能力比较强。呵呵

On 4月17日, 下午9时27分, "陈怀兴" <silw...@gmail.com> wrote:
> think hard
> :-)
>
> 2008/4/17 coffeecat10 <zhaoy...@gmail.com>:
>
> > 两个都是否吗?
>
> > 2008/4/17 陈怀兴 <silw...@gmail.com>:
>
> > > 友情感谢pongba为我提供第一题 :-)
>
> > > 2008/4/17 陈怀兴 <silw...@gmail.com>:
Message has been deleted

陈怀兴

unread,
Apr 17, 2008, 9:42:25 AM4/17/08
to pon...@googlegroups.com
第一题为什么不可能?说明理由。

关于第二题,说来听听嘛。

2008/4/17 hyifeng <hyi...@gmail.com>:

xxmplus

unread,
Apr 17, 2008, 9:55:51 AM4/17/08
to pon...@googlegroups.com
我是这样想的,两个1只间隔了一个0,所以不管怎么移位,它们一定是同时出现在奇位或者偶位上,假设是奇位好了,那么奇位和为2,偶位和为0,根据题意,只能在相邻的两位上同时加1,也就是奇位和偶位同时加1,所以不管怎么加,奇位和与偶位和永远差2,无法相等,那么也就不可能让6个数字相等了。

2008/4/17 陈怀兴 <sil...@gmail.com>:

--
Any complex technology which doesn't come with documentation must be the best
available.

Message has been deleted

陈怀兴

unread,
Apr 17, 2008, 9:59:54 AM4/17/08
to pon...@googlegroups.com
yes, you got the point.
and it is called invariant method.
well done!

2008/4/17 xxmplus <xxm...@gmail.com>:

hyifeng

unread,
Apr 17, 2008, 10:09:09 AM4/17/08
to TopLanguage
大概支持4×4×3×2张牌,

我想问 “整齐地叠好放在桌子上” 是指什么,如果是必须放在一行直线上。
我得重新想了。

On 4月17日, 下午9时59分, "陈怀兴" <silw...@gmail.com> wrote:
> yes, you got the point.
> and it is called invariant method.
> well done!
>
> 2008/4/17 xxmplus <xxmp...@gmail.com>:
>
>
>
> > 我是这样想的,两个1只间隔了一个0,所以不管怎么移位,它们一定是同时出现在奇位或者偶位上,假设是奇位好了,那么奇位和为2,偶位和为0,根据题意,只能在相邻的两位上同时加1,也就是奇位和偶位同时加1,所以不管怎么加,奇位和与偶位和永远差2,无法相等,那么也就不可能让6个数字相等了。
>
> > 2008/4/17 陈怀兴 <silw...@gmail.com>:
> > > 第一题为什么不可能?说明理由。
>
> > > 关于第二题,说来听听嘛。
>
> > > 2008/4/17 hyifeng <hyif...@gmail.com>:

陈怀兴

unread,
Apr 17, 2008, 10:15:34 AM4/17/08
to pon...@googlegroups.com
就是我们平常打牌的时候,洗完牌后,整齐的一叠的那个样子。垂直往下看,应该只能看到一张牌的那个样子 :-)

2008/4/17 hyifeng <hyi...@gmail.com>:

alai

unread,
Apr 17, 2008, 10:46:39 AM4/17/08
to pon...@googlegroups.com
怎么摆有区别吗?难道hyifeng是想用牌的摆放位置来作暗示?我认为题意是只允许利用四张牌的先后顺序作为提示,不允许用其它位置信息。

在 08-4-17,hyifeng<hyi...@gmail.com> 写道:

陈怀兴

unread,
Apr 17, 2008, 11:11:05 AM4/17/08
to pon...@googlegroups.com
把第一题扩展一下吧。如果现在允许的操作变为了flip相邻的两位:即如果原来是0,flip一下就变为1,反之,则由1变为0。那么是不是存在经过若干次这样的flip,可以使得最后的6个数字都为一样的值?

2008/4/17 xxmplus <xxm...@gmail.com>:

windstorm

unread,
Apr 17, 2008, 11:16:56 AM4/17/08
to pon...@googlegroups.com
那不就3步解决了?

如果相邻两个都是0,flip一下是不是都是1了?

2008/4/17 陈怀兴 <sil...@gmail.com>:

--

alai

unread,
Apr 17, 2008, 11:19:07 AM4/17/08
to pon...@googlegroups.com
应该是2步吧:
1 0 1 0 0 0 -> 0 1 1 0 0 0 -> 0 0 0 0 0 0

在 08-4-17,windstorm<likunar...@gmail.com> 写道:

windstorm

unread,
Apr 17, 2008, 11:20:42 AM4/17/08
to pon...@googlegroups.com
对,呵呵。

2008/4/17 alai <ala...@gmail.com>:

陈怀兴

unread,
Apr 17, 2008, 11:22:49 AM4/17/08
to pon...@googlegroups.com
对,这个很简单。
其实,我想问的是能够flip成相同的值的充要条件是什么 :-)

2008/4/17 windstorm <likunar...@gmail.com>:

googlechen

unread,
Apr 19, 2008, 10:16:45 AM4/19/08
to TopLanguage

对于第二题,我是这样想的:
其实就是问使用4张牌,能不能排出48种不同的组合出来。如果不计每张牌的正反面,4张牌可以有4x3x2=24种排法,如果4张牌必须按照相同的正反
面摆放,那么就可以有24x2=48种排法,如果每张正反面可以不同,那末可以有24x2x2x2x2种排法。所以我觉得必须要用正反面信息。两人约定
好一个算法能够判断48张牌的大小顺序(例如首先按照花色比:黑桃>红桃>方块>草花,花色相同的按照牌点),藏起来的那张牌在这48张牌中有一个序
数,然后把4张牌排出那个序数就可以了。至于怎么把4张牌排出指的序数,最笨的办法就是先把这四张牌按照前述的规则映射成1、2、3、4这四个数,然后
造一个表把1、2、3、4的不同排列映射成1至24,然后用正面朝上表示1至24,方面朝上表示25至48。好一点的办法懒得想了。

alai

unread,
Apr 19, 2008, 10:27:17 AM4/19/08
to pon...@googlegroups.com
第二题的确很有意思,我的直觉(或者说有一点点推理)认为答案是肯定的。
完整的解法还有思考中,现在只有一些零碎的想法:
1. 首先要对52张牌定义一个大小顺序,如AS-AH-AD-AC-KS-KH-...-2S-2H-2D-2C,AKQJ...2为牌的点数,SHDC为牌的花色。
2. 给同事看的4张牌可以按不同顺序排列,以给出一定量的信息,4张牌的排列有4!=24种,即如果这4张牌的点数和花色可以让你的同事推导出一个候选集合且集合中的牌数小于24,就可以从4张牌的顺序推出要猜的牌。
3. 任选的5张牌从大到小排列,记为abcde,根据它们各自间的距离决定留下那张牌,我直觉认为留下的那张牌应该是在一个较小的区间。

继续思考中...

在 08-4-17,陈怀兴<sil...@gmail.com> 写道:

alai

unread,
Apr 19, 2008, 10:29:25 AM4/19/08
to pon...@googlegroups.com
正反面我也想过,不过如果允许正反面的话就太简单了,所以我放弃了这个条件,假定只能用正面。请LZ解释题意,最好再严格和清晰一些。

在 08-4-19,googlechen<che...@sina.com> 写道:

googlechen

unread,
Apr 19, 2008, 10:40:20 AM4/19/08
to TopLanguage
把1至24中的一个数映射成1、2、3、4的一个排列的好一点的办法:
把1至24均分成4段,(第1段1至6,第2段7至12,第3段13至18,第4段19至24),目标数字在那一段,就把这一段的序数排在最高位,例如
15,就映射成3XXX。剩下的问题就变成了:把1至6中的一个数映射成1、2、3的一个排列。不在赘述。
> 造一个表把1、2、3、4的不同排列映射成1至24,然后用正面朝上表示1至24,反面朝上表示25至48。好一点的办法懒得想了。

silwile

unread,
Apr 19, 2008, 10:58:23 AM4/19/08
to pon...@googlegroups.com
这两个讨论很有意思啦 :-)
其实,这里我们不允许利用正反面或横放竖放等进行编码。

2008/4/19 alai <ala...@gmail.com>:

silwile

unread,
Apr 19, 2008, 10:59:25 AM4/19/08
to pon...@googlegroups.com
这种编码方法很有意思,好玩。
good :-)

2008/4/19 googlechen <che...@sina.com>:

googlechen

unread,
Apr 19, 2008, 11:10:02 AM4/19/08
to TopLanguage
那么可能就需要把5张牌中的特定一张留下,而不是随便把哪一张留下?

On 4月19日, 下午10时58分, silwile <silw...@gmail.com> wrote:
> 这两个讨论很有意思啦 :-)
> 其实,这里我们不允许利用正反面或横放竖放等进行编码。
>
> 2008/4/19 alai <ala...@gmail.com>:
>
>
>
> > 正反面我也想过,不过如果允许正反面的话就太简单了,所以我放弃了这个条件,假定只能用正面。请LZ解释题意,最好再严格和清晰一些。
>
> > 在 08-4-19,googlechen<cher...@sina.com> 写道:
>
> > > 对于第二题,我是这样想的:
> > > 其实就是问使用4张牌,能不能排出48种不同的组合出来。如果不计每张牌的正反面,4张牌可以有4x3x2=24种排法,如果4张牌必须按照相同的正反
> > > 面摆放,那么就可以有24x2=48种排法,如果每张正反面可以不同,那末可以有24x2x2x2x2种排法。所以我觉得必须要用正反面信息。两人约定
> > > 好一个算法能够判断48张牌的大小顺序(例如首先按照花色比:黑桃>红桃>方块>草花,花色相同的按照牌点),藏起来的那张牌在这48张牌中有一个序
> > > 数,然后把4张牌排出那个序数就可以了。至于怎么把4张牌排出指的序数,最笨的办法就是先把这四张牌按照前述的规则映射成1、2、3、4这四个数,然后
> > > 造一个表把1、2、3、4的不同排列映射成1至24,然后用正面朝上表示1至24,方面朝上表示25至48。好一点的办法懒得想了。- 隐藏被引用文字 -
>
> - 显示引用的文字 -

silwile

unread,
Apr 19, 2008, 11:13:06 AM4/19/08
to pon...@googlegroups.com
坦白地说,能想到这一点是一个非常有前途的进展。

你想到了关键的三步中的第一步 :-)
+U

2008/4/19 googlechen <che...@sina.com>:

nothanks

unread,
Apr 20, 2008, 2:35:25 AM4/20/08
to TopLanguage
在大家的启发下终于想出来了。
用4张牌编码剩下的48张
第一步,4张编码牌从小到大看作1、2、3、4,代表48张中的4段之一,目标牌处于哪一段就将代表这一段的编码牌放在最上面
第二步,剩下的3张编码牌从小到大看作1、2、3,代表12张中的3段之一,目标牌处于哪一段就将代表这一段的编码牌放在第二个位置
....
一共四步就可以推出是什么牌了,应该没有错误吧?

On Apr 19, 11:13 pm, silwile <silw...@gmail.com> wrote:
> 坦白地说,能想到这一点是一个非常有前途的进展。
>
> 你想到了关键的三步中的第一步 :-)
> +U
>
> 2008/4/19 googlechen <cher...@sina.com>:

nothanks

unread,
Apr 20, 2008, 2:37:16 AM4/20/08
to TopLanguage
在大家的启发下终于想出来了。
用4张牌编码剩下的48张
第一步,4张编码牌从小到大看作1、2、3、4,代表48张中的4段之一,目标牌处于哪一段就将代表这一段的编码牌放在最上面
第二步,剩下的3张编码牌从小到大看作1、2、3,代表12张中的3段之一,目标牌处于哪一段就将代表这一段的编码牌放在第二个位置
....
一共四步就可以推出是什么牌了,应该没有错误吧?

On Apr 19, 11:13 pm, silwile <silw...@gmail.com> wrote:
> 坦白地说,能想到这一点是一个非常有前途的进展。
>
> 你想到了关键的三步中的第一步 :-)
> +U
>
> 2008/4/19 googlechen <cher...@sina.com>:

silwile

unread,
Apr 20, 2008, 2:45:05 AM4/20/08
to pon...@googlegroups.com
请不要用省略号省去第三步与第四步,写完整它,你会发现:像你这样做,最后剩下是两张牌,而不是一张牌。

BTW:这个思路还是有些意思的 :-)

2008/4/20 nothanks <noth...@gmail.com>:

nothanks

unread,
Apr 20, 2008, 2:59:09 AM4/20/08
to TopLanguage
想简单了。。。。-___-

On Apr 20, 2:45 pm, silwile <silw...@gmail.com> wrote:
> 请不要用省略号省去第三步与第四步,写完整它,你会发现:像你这样做,最后剩下是两张牌,而不是一张牌。
>
> BTW:这个思路还是有些意思的 :-)
>
> 2008/4/20 nothanks <nothan...@gmail.com>:

silwile

unread,
Apr 20, 2008, 3:25:09 AM4/20/08
to pon...@googlegroups.com
其实,你可以参考一下前面googlechen的一个想法。那个想法,真是特关键的一步。

2008/4/20 nothanks <noth...@gmail.com>:

NjuBee

unread,
Apr 20, 2008, 7:03:16 AM4/20/08
to pon...@googlegroups.com
这道特别的题不好玩, 用花色骗人, 下面是应该是标准答案, 如果只用第二三条的话可以做70+张扑克

1)5张有2张同花色, 点数分别为a,b
2)因为0<a-b<13 (循环减), 可以排列这两张牌使 0<a-b<6
3)把这花色a牌藏着,b牌放第一个, 其他3张按大小做排列(1*2*3=6, 可以排列出小于等于6的值)出a-b的值
这样只能编码13*4=52张牌, 用这里的第二三条就能编码70多张牌

全部思路: 用排列编码 -> 还是不够 ->合理选择藏着的一张和跟编码做加减计算的一张


在 08-4-20,silwile<sil...@gmail.com> 写道:

silwile

unread,
Apr 20, 2008, 7:25:23 AM4/20/08
to pon...@googlegroups.com
我们不仅想要一个漂亮的解,我们更想要的是求得漂亮解的这个过程。像你这样光去看所谓的标准答案的话,是不会知道这个题到底好玩不好玩的。

2008/4/20 NjuBee <eag...@gmail.com>:

windstorm

unread,
Apr 20, 2008, 7:40:03 AM4/20/08
to pon...@googlegroups.com
晕,我就是想到第二步卡壳的

2)因为0<a-b<13 (循环减), 可以排列这两张牌使 0<a-b<6

如何排列这两张牌使 0<a-b<6?比如一个红桃a一个红桃k,你的意思是如果大于6了,取|b-a|,也就是绝对值??

2008/4/20 silwile <sil...@gmail.com>:

--

NjuBee

unread,
Apr 20, 2008, 8:01:20 AM4/20/08
to pon...@googlegroups.com
N年前 李宇峰给我这道题的时候, 想卡住了, 他给我个提示选择藏着的牌的花色 我就得到这个答案了, 所以我说"应该是标准答案"
过几天我给一个能做70+张牌的新编码, 我就不给具体数字(因为这个具体数字能给太多的提示), 大家想想

思路我上面说了: 用排列编码 -> 还是不够 ->合理选择藏着的一张和跟编码做加减计算的一张 -> (试考虑钟表面,所有数字才完全对称和方便做加减)

绝对不要考虑花色

to windstorm: a - k = 1 - 13 = -12 = 1 (做循环加减)
2)因为0<a-b<13 (循环减), 可以排列这两张牌使 *0<a-b<=6* (少个等号)
如果大于6了换一下a,b的顺序就行了 因为 0<a-b<13

windstorm

unread,
Apr 20, 2008, 8:18:32 AM4/20/08
to pon...@googlegroups.com
恩,这个循环,没想到,呵呵,所以卡在怎么用3张牌表示12的差值了。

多谢。

2008/4/20 NjuBee <eag...@gmail.com>:

--

NjuBee

unread,
Apr 20, 2008, 9:02:32 AM4/20/08
to pon...@googlegroups.com
用3张牌表示小于等于6的差值
前面有人给出了

在 08-4-20,windstorm<likunar...@gmail.com> 写道:

alai

unread,
Apr 20, 2008, 9:11:41 AM4/20/08
to pon...@googlegroups.com
我觉得有可能不止70+,我目前能推出的上限是5!+4=124,但很可能不是最小上限

在 08-4-20,NjuBee<eag...@gmail.com> 写道:

silwile

unread,
Apr 20, 2008, 9:34:37 AM4/20/08
to pon...@googlegroups.com
我觉得124是最大的上限了。因为根据游戏规则,你的同事最多可能传给你的信息为 C(5,4) *  4! = 120.

我觉得这个题好玩是因为它有很多种有意思的解;还有就是这个题的泛化情况非常具有挑战性,即把5张牌泛化成n成牌;以及构造只需进行简单解码就可以的策略。

2008/4/20 alai <ala...@gmail.com>:

silwile

unread,
Apr 20, 2008, 9:55:10 AM4/20/08
to pon...@googlegroups.com
其实,所有的策略都可以看成一种映射,这种映射是one-to-one的。只有这样,你的同事才能反过来推出那张牌。
假如先在这副牌有n张,那个人A则有C(n,5)种选择,而你的选择为C(n,4)*4!种。
如果是125张牌的话,前者的值已大于后者的值。那么这种映射肯定不会满足one-to-one的性质。

2008/4/20 silwile <sil...@gmail.com>:

hayate

unread,
Apr 20, 2008, 8:35:11 PM4/20/08
to pon...@googlegroups.com
恩 我也是 不知道怎么用3张牌编码12张
有意思

2008/4/20 windstorm <likunar...@gmail.com>:

alai

unread,
Apr 20, 2008, 9:43:46 PM4/20/08
to pon...@googlegroups.com
如何是任抽2张牌,给同事1张牌,可允许的最大牌数=2!+1=3
编码很简单:
1 2
2 3
3 1

如何是任抽3张牌,给同事2张牌,可允许的最大牌数=3!+2=8
以下是我手工排出来的编码,没找到什么规律:
1 2 3
1 3 4
1 4 5
1 5 2
1 6 3
1 7 4
1 8 7
2 1 4
2 3 4
2 4 5
2 5 6
2 6 4
2 7 1
2 8 3
3 1 5
3 2 5
3 4 5
3 5 6
3 6 4
3 7 1
3 8 6
4 1 6
4 2 7
4 3 7
4 5 6
4 6 7
4 7 5
4 8 3
5 1 6
5 2 7
5 3 8
5 4 8
5 6 7
5 7 3
5 8 1
6 1 2
6 2 3
6 3 7
6 4 8
6 5 8
6 7 1
6 8 2
7 1 5
7 2 6
7 3 2
7 4 8
7 5 8
7 6 8
7 8 2
8 1 4
8 2 1
8 3 1
8 4 2
8 5 2
8 6 1
8 7 3

我猜,任抽n张牌,给同事n-1张牌,可允许的最大牌数=n!+n-1
不过通用的编码方法还没有构造出来

在 08-4-21,hayate<haya...@gmail.com> 写道:

silwile

unread,
Apr 21, 2008, 12:32:21 AM4/21/08
to pon...@googlegroups.com

n!+n-1的牌数应该是可能编码的上限。很多时候都达不到这个限的吧。比如试一试 n=4, 任抽 2 张牌,1 张给同事。

2008/4/21 alai <ala...@gmail.com>:

silwile

unread,
Apr 21, 2008, 1:02:07 AM4/21/08
to pon...@googlegroups.com

"比如试一试 n=4, 任抽 2 张牌,1 张给同事。" 这个讲错了。
2008/4/21 silwile <sil...@gmail.com>:

n!+n-1的牌数应该是可能编码的上限。很多时候都达不到这个限的吧。

sanachilleus

unread,
Apr 21, 2008, 1:31:21 AM4/21/08
to TopLanguage
对于第一题陈怀兴老大的扩展"即如果原来是0,flip一下就变为1,反之,则由1变为0。"
这个条件真是个不错的伪装。如果把原题中所有的0都改成-1,题目的结果不会改变,但难度下降了许多。


On 4月21日, 下午1时02分, silwile <silw...@gmail.com> wrote:
> "比如试一试 n=4, 任抽 2 张牌,1 张给同事。" 这个讲错了。
> 2008/4/21 silwile <silw...@gmail.com>:
> > > 在 08-4-21,hayate<hayate...@gmail.com> 写道:
> > > > 恩 我也是 不知道怎么用3张牌编码12张
> > > > 有意思
>
> > > > 2008/4/20 windstorm <likunarmstr...@gmail.com>:
>
> > > > > 晕,我就是想到第二步卡壳的
>
> > > > > 2)因为0<a-b<13 (循环减), 可以排列这两张牌使 0<a-b<6
>
> > > > > 如何排列这两张牌使
> > > > 0<a-b<6?比如一个红桃a一个红桃k,你的意思是如果大于6了,取|b-a|,也就是绝对值??
>
> > > > > 2008/4/20 silwile <silw...@gmail.com>:
>
> > > > 我们不仅想要一个漂亮的解,我们更想要的是求得漂亮解的这个过程。像你这样光去看所谓的标准答案的话,是不会知道这个题到底好玩不好玩的。
>
> > > > > > 2008/4/20 NjuBee <eag0...@gmail.com>:
>
> > > > > > > 这道特别的题不好玩, 用花色骗人, 下面是应该是标准答案, 如果只用第二三条的话可以做70+张扑克
>
> > > > > > > 1)5张有2张同花色, 点数分别为a,b
> > > > > > > 2)因为0<a-b<13 (循环减), 可以排列这两张牌使 0<a-b<6
> > > > > > > 3)把这花色a牌藏着,b牌放第一个, 其他3张按大小做排列(1*2*3=6, 可以排列出小于等于6的值)出a-b的值
> > > > > > > 这样只能编码13*4=52张牌, 用这里的第二三条就能编码70多张牌
>
> > > > > > > 全部思路: 用排列编码 -> 还是不够 ->合理选择藏着的一张和跟编码做加减计算的一张
>
> > > > > > > 在 08-4-20,silwile<silw...@gmail.com> 写道:
>
> > > > > > > > 其实,你可以参考一下前面googlechen的一个想法。那个想法,真是特关键的一步。
>
> > > > > > > > 2008/4/20 nothanks <nothan...@gmail.com>:
> > > > > msn: likunarmstrong at hotmail.com- 隐藏被引用文字 -
>
> - 显示引用的文字 -
Message has been deleted

silwile

unread,
Apr 21, 2008, 8:27:01 AM4/21/08
to pon...@googlegroups.com
"1的数目为偶数"?这个既不是充分的,也不是必要的。是不是你表达错了?
由第1题的结论可以直接得到的一个必要条件为  奇数位之和的奇偶性 == 偶数位数之和的奇偶性

2008/4/21 JeanvaHe <Jean...@gmail.com>:
第一题的充要条件就是:1的数目为偶数?

silwile

unread,
Apr 22, 2008, 12:39:07 PM4/22/08
to pon...@googlegroups.com
今天刚好在Skpye遇到了Anis,一个在topcoder里认识的朋友。问了他第二个题扩展情况即取n张牌,是不是可以使得可编码牌的数量肯定可以到达n!+n-1这个限。他说可以达到这个限,这是可以证明的,这个证明非常具有挑战性。

前面Njubee提到说这道题特别不好玩,它用花色骗人。不用花色这个概念,我们可以编码更多的牌。这也许有点道理。因为如果考虑花色的话限制了我们能编码的牌的数量。但是,从另一个角度看,花色也可以看成是帮助我们解题的线索。因为,其实,所谓的花色,就是把所有的牌分成4个段,每个段的编码从1到13。如果我们选5张牌的话,根据鸽笼原理,肯定存在两张牌落在同一个段上。如果引入了花色这个概念,也许我们更能想到这一点。这一点我们可以从把题目的5张牌扩展成6张牌的时候能够看到:即当抽取6张牌的时候即可以把这副牌看成有5种颜色。

这个题目,曾经是我们好几个人在一起求解与讨论做的题。当时,除了追求最大化能够编码的牌数,我们还追求在实际的操作中的计算简洁性。当然那个所谓标准答案我认为是计算很简洁的。我们在当时在计算简洁性方面的讨论得也很有意思。比如举个小例子,用3张牌编码6个数当然很简单,比如很多人就直接用排列来编码。这当然可以。但那时我们中有个人就提了这个一个编码方式:比如三张牌123,白最小的出现的那个数出现的位置作为一个信息,这个信息可以编码1,2,3.然后又最大与次大数递减序则加3,否则加0。比如,这样123编码的数就是1, 132编码的数就是4等等。虽然这个改进很微小,但是我们还是觉得有点意思这里面。

对于5张牌,确实存在一种策略,使得能够编码的最大牌数是124张。这样的策略的计算量当然是相当大的。实际操作是不可行的。
我们知道对于52张牌,存在着一种顺便从大街上sample两个人就能实际操作可行的策略。
对于Njubee提到的70+的那个策略,是不是一个可以在 TopLanguage里顺便sample两个人就能实际操作可行的策略呢?

2008/4/17 陈怀兴 <sil...@gmail.com>:
接着来;
还是两个题吧。一个简单的,一个中等难度的。

1.  6个数组成一个串: 1 0 1 0 0 0  。它的首尾是相连的。即我们认为第一个数字与最后一个数字是相邻的。现在,你被允许的操作为每次为相邻两位数字同时加1。问:能否通过若干次这样的操作使得这6个数字最后都相等?如果存在,那么请问需要的最少的操作次数为多少?

2.  一副完整的扑克牌52张(除去大小王)。现在你和同事一起来做一个游戏。游戏的总体流程是这样的:先由一个陌生人A 从一副扑克牌中任选出5张牌。然后A把这选出的5张牌给你,你把这5张牌中留下一张牌,另外4张牌则整齐地叠好放在桌子上。然后,你的同事看了这4张牌之后,就可以知道你留下的那张牌是什么。请问,这是可以做到的吗?如果可以,请问你与你的同事该怎么做才能完成这个游戏?

that is it.
enjoy
 ^-^

NjuBee

unread,
Apr 23, 2008, 11:36:20 AM4/23/08
to pon...@googlegroups.com
这个52的4花色的也不算简洁啊

下面的描述有疑惑就考虑我是按*顺时针* *循环地*考虑一个*钟表*的点的, 特别指明加减都是循环的, 再有疑惑请回信

在5个点选出相连的3点ABC, 使得BC距离(C-B)是所有5点中相连点中距离最大, 藏好B点, 用剩下4个数对AB距离编码 简洁好几倍

只要总点数<=53, 那么AB距离<=24的, 这个编码比52的4花色简单吧
54=sum 1,1,1,25,26时不能按上面编码, 但可以搞个特例(留下的4个数距离是1,1,26,26, 编码却大于1, 哦有23个选择浪费可耻啊)

既然搞特例,不如对一类搞特例, B-A>24, 就再找A'B'C' 必要时是对B'-A'+x编码, 这个x是跟ABC有关系的,
我这样就搞出70+的, 我选择的A'为A前一点, B'=A C'=B, 但我忘了x的计算了(两三个加减法)

方案的描述的长度仅是53的两三倍,两个人都是只做几个加减和一个if运算, 特例还可以继续弄


在 08-4-23,silwile<sil...@gmail.com> 写道:

NjuBee

unread,
Apr 23, 2008, 11:45:09 AM4/23/08
to pon...@googlegroups.com
正则二部图

在 08-4-23,silwile<sil...@gmail.com> 写道:

silwile

unread,
Apr 23, 2008, 9:45:18 PM4/23/08
to pon...@googlegroups.com
既然你是要用剩下的4个数对AB的距离进行编码,那么你又怎么让你的同事知道到底哪张牌是A的呢?

2008/4/23 NjuBee <eag...@gmail.com>:

NjuBee

unread,
Apr 24, 2008, 6:55:41 AM4/24/08
to pon...@googlegroups.com
既然BC是距离最大, 剩下的4个数中AC距离也肯定是最大的

在 08-4-24,silwile<sil...@gmail.com> 写道:

silwile

unread,
Apr 24, 2008, 8:08:26 AM4/24/08
to pon...@googlegroups.com
怎么分别哪个是A,哪个是C?

2008/4/24 NjuBee <eag...@gmail.com>:

silwile

unread,
Apr 24, 2008, 9:01:23 AM4/24/08
to pon...@googlegroups.com
像你这样先规定好方向的话,最大两点之间的距离可以达到n-5,而不是(n-5)/2。n为牌数。

2008/4/23 NjuBee <eag...@gmail.com>:

NjuBee

unread,
Apr 24, 2008, 10:51:40 AM4/24/08
to pon...@googlegroups.com
顺时针

Chris

unread,
Apr 25, 2008, 4:38:49 AM4/25/08
to TopLanguage
我是这样考虑的,如果5张牌的话,那必然有至少两张牌的花色是相同的,所以要留下的是有相同花色的牌,然后约定同事首先看到的那张牌的花色一定是同我手
上牌的花色相同,那么即使还有相同花色的牌的话也无所谓了,这样的下来,就只需要猜点数了,除去已经知道的一张牌的点数(最坏情况下),那么还有12
点,最关键的就是如何用剩余的3张牌来进行编码了........昨晚想了很久无果,昏昏然便睡去了。

不知道这个思路行不,欢迎各位指正~~



On 4月19日, 下午11时13分, silwile <silw...@gmail.com> wrote:
> 坦白地说,能想到这一点是一个非常有前途的进展。
>
> 你想到了关键的三步中的第一步 :-)
> +U
>
> 2008/4/19 googlechen <cher...@sina.com>:
>
>
>
> > 那么可能就需要把5张牌中的特定一张留下,而不是随便把哪一张留下?
>
> > On 4月19日, 下午10时58分, silwile <silw...@gmail.com> wrote:
> > > 这两个讨论很有意思啦 :-)
> > > 其实,这里我们不允许利用正反面或横放竖放等进行编码。
>
> > > 2008/4/19 alai <ala...@gmail.com>:
>
> > > > 正反面我也想过,不过如果允许正反面的话就太简单了,所以我放弃了这个条件,假定只能用正面。请LZ解释题意,最好再严格和清晰一些。
>
> > > > 在 08-4-19,googlechen<cher...@sina.com> 写道:
>
> > > > > 对于第二题,我是这样想的:
>
> > 其实就是问使用4张牌,能不能排出48种不同的组合出来。如果不计每张牌的正反面,4张牌可以有4x3x2=24种排法,如果4张牌必须按照相同的正反
>
> > 面摆放,那么就可以有24x2=48种排法,如果每张正反面可以不同,那末可以有24x2x2x2x2种排法。所以我觉得必须要用正反面信息。两人约定
>
> > 好一个算法能够判断48张牌的大小顺序(例如首先按照花色比:黑桃>红桃>方块>草花,花色相同的按照牌点),藏起来的那张牌在这48张牌中有一个序
>
> > 数,然后把4张牌排出那个序数就可以了。至于怎么把4张牌排出指的序数,最笨的办法就是先把这四张牌按照前述的规则映射成1、2、3、4这四个数,然后
> > > > > 造一个表把1、2、3、4的不同排列映射成1至24,然后用正面朝上表示1至24,方面朝上表示25至48。好一点的办法懒得想了。-
> > 隐藏被引用文字 -
>
> > > - 显示引用的文字 -- 隐藏被引用文字 -
>
> - 显示引用的文字 -

Chris

unread,
Apr 25, 2008, 4:45:33 AM4/25/08
to TopLanguage
狂晕,没看到第2页,就发了.....

NjuBee

unread,
Apr 25, 2008, 6:35:50 AM4/25/08
to pon...@googlegroups.com
因为BC是最大距离, 所以AB的距离最大为(n-5)/2

如53牌, 5个点分别为 11, 40, 14,13,12
A=11,B=40,C=14
BC为最大距离
AB的距离是11-40=24

在 08-4-24,silwile<sil...@gmail.com> 写道:

怀宇范

unread,
Apr 25, 2008, 8:41:06 AM4/25/08
to pon...@googlegroups.com
第一题我觉得像求解一个线性方程组,相邻两个增加的次数作为未知数,这样就有六个未知数,用a b c d e f表示。而每一个数最后的值设为T,这样,根据各个数就可以得到六个方程,像a + b = T ; b + c = T - 1,依次类推。。。加之最后的解要求是整数,且保证T最小,这样就可以求解了。。。只是我线性代数全部还给老师,正极力回忆中。。。


2008/4/17 陈怀兴 <sil...@gmail.com>:
接着来;
还是两个题吧。一个简单的,一个中等难度的。

1.  6个数组成一个串: 1 0 1 0 0 0  。它的首尾是相连的。即我们认为第一个数字与最后一个数字是相邻的。现在,你被允许的操作为每次为相邻两位数字同时加1。问:能否通过若干次这样的操作使得这6个数字最后都相等?如果存在,那么请问需要的最少的操作次数为多少?

2.  一副完整的扑克牌52张(除去大小王)。现在你和同事一起来做一个游戏。游戏的总体流程是这样的:先由一个陌生人A 从一副扑克牌中任选出5张牌。然后A把这选出的5张牌给你,你把这5张牌中留下一张牌,另外4张牌则整齐地叠好放在桌子上。然后,你的同事看了这4张牌之后,就可以知道你留下的那张牌是什么。请问,这是可以做到的吗?如果可以,请问你与你的同事该怎么做才能完成这个游戏?

that is it.
enjoy
 ^-^





--
bool ContactMe(person you)
{
if(you.GoTo("14#344, Tsinghua") && you.Find("Fan Huaiyu"))return true;
if(you.MailTo(" dugu...@gmail.com ") || you.MailTo(" fan...@mails.tsinghua.edu.cn "))return true;
if(you.PhoneTo("13488810330") || you.PhoneTo("01062778689"))return true;
if(you.QQTo("120628812") || you.MSNTo("dugu...@hotmail.com"))return true;
if(you.NetTo(" www.cnblogs.com/duguguiyu "))return true;
return false;
}

杨堃

unread,
May 1, 2008, 2:49:03 AM5/1/08
to pon...@googlegroups.com
     五一去同学那玩,又要做1个小时地铁,所以有找了道题做。第二题,坐到上海火车站的时候,终于有整个的思路了。说出来请各位指教:
     首先,我们从5张牌开始分析,为什么是五张,我们知道,一副牌总共只有4种花色,如果是五张的话,那可以保证一定有2张或2张以上是同一花色,ok。通过这个我们就可以确定那种未知牌的花色。例如我的规矩就是你要猜的那张牌和我最上面的那张牌花色相同。
    ok,确定了花色,接下来应该确定点数,我一开始的思路是,因为我已经知道是这个花色里面的若干张,那么我能不能用二叉树的判别法,后来仔细考虑了下,情况太多,排除。接下我想能不能用其他几张牌的点数做点文章,发现还是情况太多,那其他的花色呢?还是行不通。


 
在08-4-25,怀宇范 <dugu...@gmail.com> 写道:

杨堃

unread,
May 1, 2008, 2:56:01 AM5/1/08
to pon...@googlegroups.com
        晕,没发完,接着说,但是通过以上分析,我们可以知道,我们要找的规律应该和花色,点数无关。那应该是我们强加给牌上面的,或者说我们只需要牌的普遍性。这时候我想到如果用1,3,9可以表示1---13中的任何数,可以解决吗?我用牌的正反两面表示+,—号,好像可以。。但是发现,我们需要表示的不是只有2态,向4=1+3但是我们还需要表示出不需要9.
        最后,我得出了最终答案,1,2,4,8,分别代表第一张,第二张,第三张,第四张的权值,牌的正面代表1,反面代表0.  未知牌的花色和第四张一样,点数等于4张牌的权值乘于1或0,每张牌是1还是0这可我们一开始就能得到。

 
在08-5-1,杨堃 <yangk...@gmail.com> 写道:

杨堃

unread,
May 1, 2008, 3:02:42 AM5/1/08
to pon...@googlegroups.com
       看了上面的留言,才知道不可以用正反,我错鸟。。:(继续努力。。

在08-5-1,杨堃 <yangk...@gmail.com> 写道:
Reply all
Reply to author
Forward
0 new messages