20200413 DEF 題解 by 孫晨曦

2022-05-29 05:00:11 字數 809 閱讀 7088

d、e、f題:孫晨曦

題解:

d題題解:組合數。

(直接選出來c(n,k)個位置,然後這k個位置取全排列的話,需要考慮去重,所以換個選法) 

這樣做,先選出k個位置,然後只取讓這k個位置都不能選擇自己的indice的排列

例如,3個數,就只能選取231,312這兩種排列。

經模擬得出1個數有0個這種排列,2個數有1個這種排列,3個數有2個,4個數有9個。

設個陣列p[1]=0,p[2]=1,p[3]=2,p[4]=9

所以就可以得到,對於n,k,答案為

c(n,k)*p[k]+c(n,k-1)*p[k-1]+...+c(n,1)*p[1] +1

最後這個+1是因為以上過程沒取從小到大順序的這一種排列(1234567),所以要加上。。。思路挺簡單,題解好像寫的有點麻煩了

e題題解:折半搜尋(meet in the middle)。

n=35,所以用折半搜尋降低搜尋的複雜度

用兩個set存兩次搜尋的模m下的每個和

然後合併,更新最大值。

合併的方法是列舉第乙個set的值(設為i),用upper_bound從第二個set中找第乙個大於m-1-i的位置,有種情況:

①如果這個位置是set2.begin()的話,就說明set2中每個數加上i,都比m大,都要取餘,那麼set2中加i模m的值最大的數應該是set2中最後乙個數,即取[set2.end()-1]的位置上的那個數。

②如果不是set2的首位置,那麼set2中加i模m的最大值應該就是[這個位置-1]的位置上的那個數。

(下面是折半搜尋的詳解和兩個例題)

技術週刊2020 04 13

五分鐘帶你讀懂tcp協議 並茂 tcp 是網際網路核心協議之一,本文介紹它的基礎知識。親,你的防盜煉鑰匙,在我手上 防盜煉,就是防你盜用我的鏈結。一般情況下以防盜煉居多,我們也來看看防盜鍊是如何做出來的。css 渲染原理以及優化策略 了解css 渲染以及優化相關的內容。深入理解position st...

DEF檔案說明

dll中匯出函式的宣告有兩種方式 1 為在函式宣告中加上 declspec dllexport 這裡不再舉例說明 2 是採用模組定義 def 檔案宣告,def檔案為鏈結器提供了有關被鏈結程式的匯出 屬性及其他方面的資訊。首先建立 乙個dll程式,cpp中 int stdcall add int nu...

def定義函式

輸入函式 input 函式從控制台獲得使用者輸入 變數 input 提示性文字 獲得的使用者輸入以字串形式儲存在變數中 in 二元操作符 賦值語句 單個賦值 同步賦值 同時給多個變數賦值,即先運算右側n個表示式,然後同時將表示式結果賦給左側 例如 t x,x y,y t x,y y,x for i ...