5146 最強單身狗

2022-08-31 12:42:07 字數 1094 閱讀 9941

題目描述

有若干只單身狗排成一排,編號從 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#include

using

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 統計杜陵韋固,元和二年旅次宋城遇一老人倚布囊,坐於階上,向月撿書。固問所尋何書,答曰 天下之婚牘耳。又問囊中何物,答曰 赤繩子耳。以系夫妻之足,及其生,則潛用相繫,雖讎敵之家,貴賤懸隔,天涯從宦,吳楚異鄉,此繩一系,終不可逭。...