G 區間或和(思維)

2021-09-10 13:24:07 字數 651 閱讀 6726

是寒假做的題解,但是不知道什麼時候設定成私密了,奇奇怪怪的

【題解】

這道題真的絆了我很久很久...但是通過量好高啊...於是

我們知道只有0|0才是0,把a,b化成二進位制先按位或一遍,然後我們可以發現每2^(i-1)個數可以把第i位從0->1,如果a的二進位制數的位數小於b,那麼顯然可以把b的第一位後邊的每一位都或成1。

當然我們知道肯定有更簡便合理的做法(哭了我真是太菜了),如下:

法一:兩個不相同的數做或運算只會變大,a+1至少1位要進行改變,a|(a+1)每次起碼多補1位0,直到當前數字超過b為止。

法二:如果a和b的二進位制位數一樣,那麼直接從左往右找到第乙個不相同的數字,然後把後面所有的數都變成1,這個就是答案(因為從a到b過程中,後面的所有位都會0到1到0的變化,所以後面的數都是1)。如果a和b的位數不相同,那麼答案就是b的最高位為1並且後面都是1,即2^(b的位數)-1。(**我就不寫了因為好像也沒有那麼簡便hhh)

【法一】

int main()

return c;

}int main()

t=1;

while(!q.empty())

}printf("%lld\n",b);

}return 0;

}

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

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

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

求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...

區間DP思維起步

這裡 區間dp顧名思義就是在乙個區間上進行的一系列動態規劃。對一些經典的區間dp總結在這裡。1 石子歸併問題 描述 有n堆石子排成一排,每堆石子有一定的數量。現要將n堆石子並成為一堆。合併的過程只能每次將相鄰的兩堆石子堆成一堆,每次合併花費的代價為這兩堆石子的和,經過n 1次合併後成為一堆。求出總的...