給定整數n和m,將1到n的這n個整數按字典序排列之後,求其中的第m個數字。
對於n = 11,m = 4,按字典序排列依次為1, 10, 11, 2, 3, 4, 5, 6, 7, 8, 9,因此第4個數字為2。
輸入 輸入僅包含兩個整數n和m。
樣例輸入
11 4
輸出 輸出僅包括一行,即所求排列中的第m個數字。
樣例輸出
2這道題又是一道trie數問題
既然是字典序,那麼很自然,我們可以考慮使用字典樹來實現,但是,這裡並不需要真的生成這個字典樹,而只需要計算對應分支的節點數就行了。
1. 首先從1開始,如果1分支的節點數》m,那麼第m個數肯定是以1開頭,進一步搜尋其子節點,搜尋子節點時不用再搜尋1了,所以是搜尋1分支的第m-1個節點。
2. 如果1分支的節點數
#include
#include
using namespace std;
long
long getcountofstart(long
long start, long
long n)//找到小於n的,以ret開頭的樹的個數
if(n >= start*base )
count += n-start*base+1;
return count;
}long
long getnum(long
long m,long
long n)
else
//當子節點數小於m時,第m個數就要在右邊的節點中尋找子節點,m減掉當前子節點數,結果加1就到了右邊相鄰的節點
}return k;
}int main()
異或(今日頭條2017秋招真題)
題目描述 給定整數m以及n個數字a1,a2,an,將數列a中所有元素兩兩異或,共能得到n n 1 2個結果。請求出這些結果中大於m的有多少個。輸入第一行包含兩個整數n,m。第二行給出n個整數a1,a2,an。輸出輸出僅包括一行,即所求的答案。樣例輸入 3 10 6 5 10 樣例輸出 2解題思路 正...
2017秋招真題 360
題目描述 寫入記憶體1到n之間的n個自然數,記憶體寫入只接受二進位制的形式,所以十進位制表達中除0和1之外的其他值都沒有成功寫入記憶體。所以有多少數字寫入了伺服器的記憶體!輸入輸入中有多組測試資料。每組測試資料在單獨的一行中,為整數n 1 n 109 109 樣例輸入 1020 輸出23 100 正...
2017秋招筆試C 真題
c 伺服器端 2017秋招 b站 1 不用除法和取餘 實現兩個數的除法和取餘操作 2 如何保持會話連線?如何實現負載均衡?實現負載均衡會話保持需要修改嗎?通過什麼方法實現負載均衡?3 linux五種i o模型?c 流 2017秋招 好未來 1 將一句話的單詞進行倒置,標點不倒置。比如 i like ...