傳送門哎哎 現在假
設最小的
數是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 超時,這篇文章對原因和基準值的優化進行驗證和總結。總結 附錄快排本身不是一種穩定的演算法,在前面的文章中也提到過,預設的實...