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

个人思路

Posted by gaoyunhenhao at 2010-08-12 00:46:58 on Problem 1023 and last updated at 2010-08-12 00:47:54
首先注意到2^(n + 1) = 2^n + 2^n,因此,在这个系统中可以表示任何2的整数冥:如果那一位为正,则只要将该位设成1,其余位为0即可,否则若该位为负的话,则向前找到第一个为正的位,比如pnnnn...,只要将这些位都设成1就行了。

所以解法是将要表示的数字变成2进制,从低位到高位遍历,如果第j位不为0的话,只要在新数字中加上2^j即可,这样根据第j位为正或负以及第j位上的当前数字分为四种情况:
1、正且为0:直接设成1
2、正且为1:设成0,然后在加一个2^(j+1),相当于进位
3、负且为1:直接设成0,
4、负且为0:设成1,并加一个2^(j + 1),
最后某次加的时候发现溢出的话就说明失败。
另外,对于64位的问题,将新数字用int[64]表示,在取原数字第j位时用
(long long)1 << j

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