PayPal2019筆試題 整理書架

2021-09-24 17:19:33 字數 1528 閱讀 9299

圖書管理員小p每天要整理書架,乙個書架有n排,每一排書架上能擺放k本書,每本書上都有索引的數字編號,例如1,5,7等等。

小p喜歡從數字編號排列最整齊的書架開始整理,因為這樣的話這排書架上的書就不用整理,按照整齊程度整理,最後整理最不整齊的那排書架。

那麼能否請機智的你幫助小p找出整理書架的順序呢?

整齊程度的定義:每排書架中書的編號存在的逆序對越少,這排書架就越整齊,一排書架中若書的編號完全公升序即為最整潔。

逆序對的定義:在乙個陣列a中,在i < j的情況下,有a[i] > a[j],則(i,j)就稱為陣列a中的乙個逆序對。

輸入格式

第一行輸入n,表示書架排數。

第二行輸入k,表示每排書架上書的數量。

之後的n*k的陣列表示每本書的數字編號。

輸出格式

輸出按照整齊程度,對各排書架重新排序後得到的新n*k的陣列。

輸出共一行,具體形式參考輸出樣例。

注意,逆序數相同則按書架原有順序整理。

資料範圍

1≤n,k≤2001≤n,k≤200,

1≤數字編號≤100001≤數字編號≤10000

輸入樣例:

4

80 1 2 3 4 5 6 7

11 6 5 7 3 2 2 0

2 3 6 1 9 3 5 4

0 2 4 5 3 10 6 7

輸出樣例:

[[0, 1, 2, 3, 4, 5, 6, 7], [0, 2, 4, 5, 3, 10, 6, 7], [2, 3, 6, 1, 9, 3, 5, 4], [11, 6, 5, 7, 3, 2, 2, 0]]
這道題目比較簡單,但是**量比較大,注意,這個題目一維陣列的範圍只有200,所以計算逆序數的時候只需要用o(n^2) 即可。

這裡排序的時候的時候,要注意,不要將原來的陣列封裝到乙個結構體裡面排序,這樣交換會比較費時(涉及到拷貝),可以封裝乙個指標。但比較麻煩。 這裡直接開乙個索引陣列,表示一種下標對映關係。

排序的時候,使用穩定排序,這樣就不需要額外處理當逆序數相同時的條件

#include #include using namespace std;

const int n = 200;

int nums[n][n];

int index[n]; // 索引陣列

int inversion[n]; // 存放每一排的逆序數

bool cmp(int a, int b)

int main()

for (int j = 0; j < m; j++)

} }stable_sort(index, index + n, cmp);

cout << '[';

for (int i = 0; i < n; i++)

cout << ']';

if (i != n - 1) cout << ", ";

} cout << ']';

}

位元組跳動2019筆試題

小明國慶節來北京玩,北京有n個景點,第 i 個景點的評分用a i 表示,兩個景點i,j之間的距離為j i j i 小明一天只能遊玩兩個景點,我們認為總評分是兩個景點的評分之和減去兩個景點之間的距離,即為a i a j i j。那麼小明選擇哪兩個景點才會總評分最大呢?輸入格式 第一行包含整數n。第二行...

CCF NOI2019筆試題庫

noi競賽辦公室 2019年7月2日 2019年7月 最新高質量比賽分享 出題人 nzhtl1477,常用id還有lxl odt olddrivertree。codeforces rating最高為2236,曾在ctsc apio wc等其他比賽獲過獎,喜歡研究oi中的資料結構,有豐富的出題和講課經...

筆試題整理

n副撲克,張數為m,大小為1 m,每幅撲克抽一張,求和恰好為k的組合數,結果對10e9 7取餘數。思路 動態規劃。和為i,j副撲克,dp i j dp i 1 j 1 dp i m j 1 此處需要判斷 i m 0 初始化,j 1,i m,dp i j 1 i j,dp i j 1,後面的情況不可能...