Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:谁能讲讲第一个测试结果怎么得到的?

Posted by zhangfeifei at 2010-08-16 13:06:56 on Problem 1747
In Reply To:谁能讲讲第一个测试结果怎么得到的? Posted by:yyaadet at 2005-09-29 21:00:43
高手们结果是:
//记*为n=k-1时的表达式,则n=k时,表达式为
//((An-1|Bn-1)|(*|((An-1|An-1)|(Bn-1|Bn-1))))
//则递归函数的结构为:先输出*左边的部分,然后输出*,再输出*右边的部分。
//边界条件为n=1,此时表达式为((A0|B0)|(A0|B0))。
//虽然不知道怎么得来的,但测试数据是可以分析的。
//题目要求的是给你的这个 n 位二进制数,判断是否任意的两个数的和是否进位了。
//这样分析:判断是否进位,先看最高位是哪两个数,如果最高位都是 1 ,必然进位。
//就有 1|1 = 0,0|x = 1。所以就有(An-1|Bn-1)|*。
//这个 * 是求低位是否进位。同样有这样的递归,但最后一位,也就是A0+B0是否进位就要特别考虑了。
//因为它们没有低位的考虑。于是就有A0+B0的进位用(A0|B0)|(A0|B0)来判断。
//那是不是就是(An-1|Bn-1)|((An-2|Bn-2)...|((A0|B0)|(A0|B0)))呢?不是,刚才只能确定,当 An-1 和 Bn-1 都为
//1 时才具备这样的表达式。但如果 An-1,Bn-1 不全为 1 。就要另作考虑了。这样,考虑时就不必考虑都是 1 的
//情况。也就是说看这个表达式(An-1|Bn-1)|(*|?)。这里的 * 指低位是否进位。? 指对An-1和Bn-1不全为0时的进一步判断。
//可以看到,如果低位进位,则 *=1 否则 *=0。现在判断是否进位,只要An-1和Bn-1二者之一是否为 1 即可。
//注意到,An-1和Bn-1不全为 0 时,有 An-1|Bn-1=1 。也就是说,如果后面的表达式为 0 时才进位,否则不进位。
//那么,现在已经知道低位进位 *=1,否则*=0 。要做的是,使An-1和Bn-1两者之一是 1 时与 * 运算,有
//1|?=0,0|?=1。并且当两者都不是 1 时,有1|?=1,0|?=1。由于0|x=1,所以只需考虑 1|? 的情况。
//于是有当两者之一是 1 时,?=0,并且两者均为 0 时,?=1。于是有?=(An-1|An-1)|(Bn-1|Bn-1)
//这样,整个式子就是:((An-1|Bn-1)|(*|((An-1|An-1)|(Bn-1|Bn-1))))。

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator