1777:尋找整數
時間限制: 1000 ms 記憶體限制: 262144 kb
【題目描述】
給定整數m,k,求出正整數n使得n+1,n+2,…,2n 中恰好有m個數在二進位制下恰好有k個1。有多組資料。
【輸入】
第一行乙個整數 t表示資料組數。接下來 t 行每行兩個整數m,k。
【輸出】
每組資料輸出一行兩個整數,第乙個數表示264-1範圍內任意乙個滿足條件的 n,第二個數表示滿足條件的 n 的個數(無窮多用-1表示)。保證1018以內存在滿足條件的 n。
如果每組資料第乙個數全部正確,得4分。
如果每組資料第二個數全部正確,得6分。
【輸入樣例】
11 2
【輸出樣例】
2 1【提示】
【資料規模】
對於10%的資料,k=2。
對於20%的資料,k≤3。
對於另外50%的資料,保證滿足條件的 n均在1018以內。
對於100%的資料,t≤2000,0≤m≤1018,1≤k≤64。
【題解】
發現題目所求等於1有k的個數的數隨著n增加單調遞增,所以答案一定在乙個區間內。
我們就可以二分出區間的上下界,現在問題就是如何求出區間內1等於k的數的個數。
按照常規差分成1-n-1,1-2n。
對於乙個x,強制其每一位為1的位為0,前頭為1的位都為1,後頭有好多種方法,用組合數求解。
**如下:
#include#define int long longview codeusing
namespace
std;
const
int inf=2e18+5
;int t,m,k,f[75][75],c[74][75
];inline
int solve(int
x) }
return
daan;
}inline
int check(int
x)inline
intfind()
return
daan;
}signed main()
if(k==1&&m==1
)
int hu1=find();
m++;
int hu2=find();
cout
"; }
}
zcmu 1777 尋找倍數(抽屜原理)
題目 time limit 1 sec memory limit 128 mb submit 230 solved 135 submit status web board 給出n n 10000 個正整數,每個數xi 15000.可以在這個n個數中選擇一些數出來,至少選擇乙個,是否存在一種選擇方案使...
zcmu1777 尋找倍數 抽屜原理
給出n n 10000 個正整數,每個數xi 15000.可以在這個n個數中選擇一些數出來,至少選擇乙個,是否存在一種選擇方案使得選擇出 來的數的和是n的整數倍 第一行乙個t t 500 第二行乙個數n,接下來n個正整數 case x y,其中x是測試編號,從1開始,y表示答案,如果存在y為yes,...
尋找符合條件的整數
題目 任意給定乙個正整數n,求乙個最小的正整數m m 1 使得n m的十進位制表示形式裡只含有1和0.解決這個問題首先考慮對於任意的n,是否這樣的m一定存在。可以證明,m是一定存在的,而且不唯一。簡單證明 因為 這是乙個無窮數列,但是數列中的每一項取值範圍都在 0,n 1 之間。所以這個無窮數列中間...