7 12 與零交換 (25 分)

2022-05-25 19:18:21 字數 894 閱讀 7284

將 的任意乙個排列進行排序並不困難,這裡加一點難度,要求你只能通過一系列的 swap(0, *) —— 即將乙個數字與 0 交換 —— 的操作,將初始序列增序排列。例如對於初始序列 ,我們可以通過下列操作完成排序:

本題要求你找出將前 n 個非負整數的給定排列進行增序排序所需要的最少的與 0 交換的次數。

輸入在第一行給出正整數 n (≤);隨後一行給出 的乙個排列。數字間以空格分隔。

在一行中輸出將給定序列進行增序排序所需要的最少的與 0 交換的次數。

10

3 5 7 2 6 4 9 0 8 1

9
3 5 7 2 6 4 9 0 8 1

0 1 2 3 4 5 6 7 8 9

由於給出的是全排序,那麼就可以看成把a[i]移到以a[i]下標的位置

可以找迴圈節即有(3,0,7,2),(5,1,9,6,4),(8)三個

第乙個節(包含0)需要迴圈節長度-1次操作,即可把其它元素移到對應的位置

第二個節(不包含0)需要迴圈節長度+1次操作,可以看成向迴圈節中加入0(操作次數加1),

那麼迴圈節長度加1(交換時次數要加1),總共比包含0的情況多操作兩次

第三個節是乙個元素,那麼不需要任何操作。

#include using

namespace

std;

const

int n=100005

;int

vis[n],a[n],b[n];

void dfs(int u,int

f)int

main()

printf(

"%d\n

",ans);

return0;

}

案例7 1 5 與零交換 25分

將 的任意乙個排列進行排序並不困難,這裡加一點難度,要求你只能通過一系列的 swap 0,即將乙個數字與 0 交換 的操作,將初始序列增序排列。例如對於初始序列 我們可以通過下列操作完成排序 輸入格式 輸入在第一行給出正整數 n 10 5 隨後一行給出 的乙個排列。數字間以空格分隔。輸出格式 在一行...

7 12 樹種統計 25 分

隨著衛星成像技術的應用,自然資源研究機構可以識別每一棵樹的種類。請編寫程式幫助研究人員統計每種樹的數量,計算每種樹佔總數的百分比。輸入首先給出正整數n 105 10 10 5 隨後n行,每行給出衛星觀測到的一棵樹的種類名稱。種類名稱由不超過30個英文本母和空格組成 大小寫不區分 按字典序遞增輸出各種...

7 12 秀恩愛分得快 25 分

古人云 秀恩愛,分得快。網際網路上每天都有大量人發布大量 我們通過分析這些 可以分析人與人之間的親密度。如果一張 上出現了 k 個人,這些人兩兩間的親密度就被定義為 1 k。任意兩個人如果同時出現在若干張 裡,他們之間的親密度就是所有這些同框 對應的親密度之和。下面給定一批 請你分析一對給定的情侶,...