牛客網2017校招真題 數列還原

2021-08-20 23:19:12 字數 1075 閱讀 3983

題目描述

解題思路

首先,順序對的個數互不影響。也就是說,對於陣列a來說,增加(插入)乙個數字,其a的順序對個數不變,所以新陣列a + 1的順序對個數 = 陣列a的順序對 + 新插入的數字產生的順序對.

進而推廣到,增加c個數字,新陣列a + c的順序對 = 陣列a的順序對 + 陣列c的順序對 + 每個新插入的數字產生順序對(共c個數字)。

所以,1)首先計算已經給出的數字共有arrbase個順序對;

2)然後計算缺失的數字共有canbase個順序對;

3)最後計算全數列產生的順序對;

對於2, 3步驟,可以將缺失的數字(陣列)進行全排列。

**

#include #include #include //#include //萬能標頭檔案(貌似vs2013不支援)

using namespace std;

//功能:實現在陣列arr中(不考慮看不清的元素)找到針對位於位置pos的元素num,滿足順序對概念的元素的個數

int getorderpair(int arr, int n, int num, int pos)

return sum;

}//功能:實現在陣列arr中找到滿足順序對概念的元素對的總個數

int getorderpairall(int arr, int n)

for (i = 1; i<=n; ++i)

int arrbase = getorderpairall(arr, n); //已給出的數字的順序對數

do if (arrbase + canbase + base == k)

++ans;

} while (next_permutation(can, can + c)); //將can進行全排列

cout << ans << endl;

return 0;

}

牛客網2017校招真題 分田地

題目描述 解題思路 if content count 4 表明當前x是16塊田地中最小的,返回true return false int main int ans 0 int left 0,right sums n m sum n m 表示所有價值總和 while left right 二分答案,判...

牛客網2017校招真題 分蘋果

題目描述 思路 如果蘋果總數不能整除人數,證明無論怎麼分,總會有人多出一些 蘋果。如果能整除,那麼每個人的最終的蘋果數目一定是平均數,不然不可能相等。所以 只需要把低於平均數那一部分補上,把高於平均數那一部分減掉就可以了。當然如果,補 上的那一部分不能整除2,證明這個人是不能通過2個蘋果的轉移來達到...

牛客網 2018校招真題 安置路燈

題目 題目描述 小q正在給一條長度為n的道路設計路燈安置方案。為了讓問題更簡單,小q把道路視為n個方格,需要照亮的地方用 表示,不需要照亮的障礙物格仔用 x 表示。小q現在要在道路上設定一些路燈,對於安置在pos位置的路燈,這盞路燈可以照亮pos 1,pos,pos 1這三個位置。小q希望能安置盡量...