題目描述
有若干只單身狗排成一排,編號從 l 到 r。gbx 發現,乙個單身狗的編號的二進位制中 1 的數量越多,表示該單身狗越強(就是單身越久咯 -_-|||)。gbx 想找到乙隻最強的單身狗和他做朋友(強者惺惺相惜吧 >_<)。
輸入
輸入乙個 t(t ≤ 1000)表示 t 組資料。
輸出
對於每組資料輸入兩個正整數
l,r(1 ≤ l ≤ r ≤ 1018 ),表示單身狗的標號。
對於每組資料輸出乙個數表示最強的單身狗的標號(如果有多個輸出最小的那個),每組資料佔一行。
樣例輸入
21 100
123 654
樣例輸出
63511
這道題如果用到乙個c語言裡面的知識就會簡單很多,「|」這個玩意兒,很多人可能想不起來了(我當然,也是,嘿嘿,看了提示之後才知道的)
「|」 :按位or,就是數學裡面的求並集
比如, 4|9 => 0010 | 1001(將其轉化為二進位制) => 1011(同位置上,只要有1,則結果位置上為1;反之,兩人同位置上都是0,則結果位置為0;)
結果答案 4|9 = 11(將結果二進位制 自動 轉化為十進位制)
題目分析:從a到b標號,就是乙個閉區間 [a,b],將此區間的數字(十進位制)轉化為二進位制時,二進位制中含「1」最多的那個標號,就是最終答案;假如有重複的,選擇標號最小的那個
標號最小,意味著「1」的位數越低越好。 假如,左值 a|a+1 (其中1都合併了)的值(十進位制)比右值b要小,就一直向右移動;比右值b大,迴圈結束,a就是最終答案(a在**中值會變)
a|a+1 得到的值 一定在原區間內 隨著「1」合併的越來越多,退出迴圈時的那個標號,就是最強「狗子」
ac**
#include#includeusing
namespace
std;
intmain()
}
D 最強單身狗
華中師範大學 2016 年 計蒜客杯 第十四屆程式設計競賽 d.最強單身狗 description 有若干只單身狗排成一排,編號從 l 到 r。gbx 發現,乙個單身狗的編號的二進位制中 1 的數量越多,表示該單身狗越強 就是單身越久咯 gbx想找到乙隻最強的單身狗和他做朋友 強者惺惺相惜吧 inp...
尋找單身狗
給出2 n 1 個的數字,除其中乙個數字之外其他每個數字均出現兩次,找到這個數字 對於該問題,我們直觀得想到,暴力遍歷整個陣列,逐一得排查陣列元素,直到找到那個單獨的數字。這個方法也很容易實現,但是其時間複雜度為o n 2 其效率並不高,不宜採用。另一種方法也很容易想到,我們可以先對整個陣列排序,然...
1040尋找單身狗
時間限制 1 sec 記憶體限制 128 mb 提交 159 解決 51 統計杜陵韋固,元和二年旅次宋城遇一老人倚布囊,坐於階上,向月撿書。固問所尋何書,答曰 天下之婚牘耳。又問囊中何物,答曰 赤繩子耳。以系夫妻之足,及其生,則潛用相繫,雖讎敵之家,貴賤懸隔,天涯從宦,吳楚異鄉,此繩一系,終不可逭。...