D 最強單身狗

2021-07-11 17:26:52 字數 1541 閱讀 7845

華中師範大學 2016 年「計蒜客杯」第十四屆程式設計競賽

d. 最強單身狗

description

有若干只單身狗排成一排,編號從 l 到 r。gbx 發現,乙個單身狗的編號的二進位制中 1 的數量越多,表示該單身狗越強(就是單身越久咯 - _ -|||) 。 gbx想找到乙隻最強的單身狗和他做朋友(強者惺惺相惜吧 >_<)。

input

輸入乙個 t(t ≤ 1000)表示 t 組資料。

對於每組資料輸入兩個正整數 l,r(1 ≤ l ≤ r ≤ 1e18),表示單身狗的標號。

output

對於每組資料輸出乙個數表示最強的單身狗的標號(如果有多個輸出最小的那個),每組資料佔一行。

sample input

2 1 100

123 654

sample output

63 511

分析:

相同位數,全1的數最好,將這些數打表放到陣列b[70]中

情況一:存在b[i] (l<=b[i]<=r),那麼找到最大的b[i]即可

情況二:不存在b[i] (l<=b[i]<=r),那麼l和r一定位數相同,且最高位相同,那麼可以l和r最高位一起去掉,l和r位數減小,重複上面步驟。

注意:將l和r的位數儲存下來,每次將位數減一而不是計算新的l和r的位數!(下面**中被注釋掉的部分就是錯誤的地方)

比如當l=1001b,r=1011b,正確答案是1011b

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define ll long long

ll b[70];

void init()

}int length(ll x)

return sum;

}ll has(ll l,ll r)

}return -1;

}ll l,r;

int main()

ll ans=0;

int cnt=max(length(l),length(r));

while(1)

// int num=length(r);

// ll tmp=(1ll<<(num-1))-1;

cnt--;

ll tmp=(1ll<1;

ans<<=1;

// ans+=r>>(num-1);

ans+=r>>cnt;

l&=tmp;

r&=tmp;}}

return

0;}

5146 最強單身狗

題目描述 有若干只單身狗排成一排,編號從 l 到 r。gbx 發現,乙個單身狗的編號的二進位制中 1 的數量越多,表示該單身狗越強 就是單身越久咯 gbx 想找到乙隻最強的單身狗和他做朋友 強者惺惺相惜吧 輸入 輸入乙個 t t 1000 表示 t 組資料。輸出 對於每組資料輸入兩個正整數 l,r ...

尋找單身狗

給出2 n 1 個的數字,除其中乙個數字之外其他每個數字均出現兩次,找到這個數字 對於該問題,我們直觀得想到,暴力遍歷整個陣列,逐一得排查陣列元素,直到找到那個單獨的數字。這個方法也很容易實現,但是其時間複雜度為o n 2 其效率並不高,不宜採用。另一種方法也很容易想到,我們可以先對整個陣列排序,然...

1040尋找單身狗

時間限制 1 sec 記憶體限制 128 mb 提交 159 解決 51 統計杜陵韋固,元和二年旅次宋城遇一老人倚布囊,坐於階上,向月撿書。固問所尋何書,答曰 天下之婚牘耳。又問囊中何物,答曰 赤繩子耳。以系夫妻之足,及其生,則潛用相繫,雖讎敵之家,貴賤懸隔,天涯從宦,吳楚異鄉,此繩一系,終不可逭。...