我解決Codeforce一個problem,這是我以前提交爲什麼我得到一個也不能少算總是
#!/usr/local/bin/python
limit = 10**18
string = raw_input()
year1, year2 = string.split()
year1 = int(year1)
year2 = int(year2)
x = 1
count = 0
a = []
while True:
k = 2**x - 1
if k > limit:
break
else:
for i in xrange(len(bin(k)[2:])):
if year1 <= k - (1 << i) <= year2 and len(bin(k - (1 << i))[2:].split('0')) == 2:
count += 1
x += 1
print count
它爲所有給定值,但它給了一個更小的計數值的範圍1
到1000000000000000000
。這是很難調試,因此我把破解了代碼的最後print
之前這樣
if year2 - year1 + 1 == limit:
count += 1
和它的工作該值,但再次給了一個價值較低值另一個範圍,1
到935829385028502935
。
難怪無邏輯黑客無法正常工作,但我想知道爲什麼以前計數值爲?
我不知道我正確理解你的問題,但你知道,'範圍(B)'將通過'B-1'正確產生值'0'? –
是的,我知道這一點,那就是意圖。比特位置從0開始,並且運行一個小於最大值......一個小於一個計數意味着比實際回答少一個計數值。 –