將 的任意乙個排列進行排序並不困難,這裡加一點難度,要求你只能通過一系列的 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 usingnamespace
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。任意兩個人如果同時出現在若干張 裡,他們之間的親密度就是所有這些同框 對應的親密度之和。下面給定一批 請你分析一對給定的情侶,...