1777 尋找整數

2022-05-25 03:57:14 字數 1238 閱讀 6422

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 long

using

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

"; }

}

view code

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 之間。所以這個無窮數列中間...