1401C Mere Array 基礎排序思維

2021-10-23 16:11:52 字數 2055 閱讀 2966

傳送門哎哎 現在假

設最小的

數是mi

nn

現在假設最小的數是minn

現在假設最小

的數是m

inn

那 麼在

a陣列中

,不是m

inn倍

數的一定

只能呆在

原地

那麼在a陣列中,不是minn倍數的一定只能呆在原地

那麼在a陣列

中,不是

minn

倍數的一

定只能呆

在原地

是 mi

nn倍數

的至少可

以和mi

nn交換

位置

是minn倍數的至少可以和minn交換位置

是minn倍

數的至少

可以和m

inn交

換位置

這就夠了。先自己想一想,再往下看。min

n可以和

所有是m

inn倍

數的數交

換位

置minn可以和所有是minn倍數的數交換位置

minn可以

和所有是

minn

倍數的數

交換位置設q

是min

n的倍數

,w是m

inn的

倍數

設q是minn的倍數,w是minn的倍數

設q是min

n的倍數

,w是m

inn的

倍數 我可以

不改變m

inn的

位置而讓

q和w交

換位

置我可以不改變minn的位置而讓q和w交換位置

我可以不改變

minn

的位置而

讓q和w

交換位置比如

比如比如

q minn w

具 體做

法是,先

將min

n和q換

位置

具體做法是,先將minn和q換位置

具體做法是,

先將mi

nn和q

換位置

得到minn q w

然後w q minn

然後w minn q

所以綜上所述,因為minn的存在,所有是minn倍數的數形成乙個整體在這個

整體中所

有數可以

以min

n為中轉

任意的交

換位

置在這個整體中所有數可以以minn為中轉任意的交換位置

在這個整體中

所有數可

以以mi

nn為中

轉任意的

交換位置至於

不是mi

nn倍數

的數,不

可能交換

位置

至於不是minn倍數的數,不可能交換位置

至於不是mi

nn倍數

的數,不

可能交換

位置 所以把

輸入的序

列排序,

比對一下

這些元素

就好

了所以把輸入的序列排序,比對一下這些元素就好了

所以把輸入的

序列排序

,比對一

下這些元

素就好了

#include using namespace std;

#define int long long

const int maxn=1e5+10;

int t,a[maxn],n,b[maxn];

vectorvec;

signed main()

sort(b+1,b+1+n);

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

if( flag ) cout << "yes\n";

else cout << "no\n";

}}

演算法基礎2 快排 堆排 桶排

整理於左神的演算法課 一。快排 荷蘭國旗問題 時間複雜度o n logn 額外空間複雜度o logn 給定乙個陣列arr,和乙個數num,請把小於num的數放在陣列的 左邊,等於num的數放在陣列的中間,大於num的數放在陣列的右邊。要求額外空間複雜度o 1 時間複雜度o n 快排的實現 publi...

演算法基礎 排序 快排

先從數列中取出乙個數作為基準數。分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。再對左右區間重複第二步,直到各區間只有乙個數 public static void quicksort int arr,int left,int right int i left int j ...

演算法基礎 快排優化 為什麼快排都會TLE

在演算法訓練中,快排應該是基礎中的基礎了,直接使用前面介紹的快排,無論是單向迴圈還是雙向迴圈方式,在特定的資料序列下,都有可能出現tle time limit exceeded 超時,這篇文章對原因和基準值的優化進行驗證和總結。總結 附錄快排本身不是一種穩定的演算法,在前面的文章中也提到過,預設的實...