牛客寒假演算法基礎集訓營6 區間或和 思維)

2022-05-06 22:21:12 字數 801 閱讀 5811

求a|(a+1)|(a+2)|...|(b-1)|b。

其中|表示[按位或](

多組輸入,每行兩個數表示a和b
對於每組輸入,輸出乙個數a|(a+1)|(a+2)|...|(b-1)|b。
示例1

99 109

68 77

55 66

34 43

1111234 1114321

111

79127

471179647

輸入不超過10000行,0≤a

,b≤10

18'>0≤a,b≤10^18

題解:如果 a=b ,那麼答案 =a ;否則 a≠b

'>a≠b

考慮a和b的二進位制表示從高到低第乙個不同的位i,必定b的第i位=1,a的第i位=0。那麼可以斷定,對於答案的二進位制表示,

(1) 比第i位更高的那些位一定跟a相同。(2) 第i位及比第i位更低的那些位一定為1。

1 #include2 #include3 #include4 #include5

using

namespace

std;

6 typedef long

long

ll;7

intmain()

821 printf("

%lld\n

",ans);22}

23 }

0≤a

,b≤10

18'>

牛客寒假演算法基礎集訓營6 G 區間或和 思維

看到這道題的時候就直接先暴力了一發,當然我知道暴力過不了,所以就在找規律,然後把每一位對應的按位或的和列了出來,如下圖1 20 其 現了很多個相同的數,如果把這些重複的數省去,時間複雜度就會降低很多,其實列出來以後就能發現當乙個數按位或乙個比它大的數的時候它才會變,所以我們對於a和b,依次列舉ans...

牛客寒假演算法基礎集訓營6

現在有正整數集合 a 和 b,每個集合裡有 n 個數,你要建立他們間的一一對映,將每對配對的數字相加可以得到 n 個和,你要做的就是最大化第 k 大的和。分別將前k大的數,乙個集合第i小的和另乙個集合第i大的,配對,得出k個數最後最小的那個數就是答案。小 q 新學會了一種魔法,可以對乙個 n行m列 ...

牛客寒假演算法基礎集訓營

首先看到這個題目資料範圍就可以知道這不是乙個可以暴力過的題。所以應該要推乙個結論。我們可以將這個同學的一來一回看成一組,那麼就可以理解為乙個來回中n可以減少n m 1 個人。那麼我們現在要讓所有人都進去,那就是看n m 1 的數量。但是有可能存在一些情況,就是說當你的倒數第二組中的回來的那趟使得n變...