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