置換群及其應用
阿新 • • 發佈:2018-08-18
sig lan dsta 給定 for 介紹 https 超級 while
置換群是由置換組成的群。即n元集合Ω到它自身的一個一一映射
稱為Ω上的一個n元置換或n階置換
Ω上的置換 可表示為
典型例題是POJ2369,給定一個序列,問需要最少需要置換多少次才能變為有序序列
有了這個定理就可以做題了,我們求出每一個數的最小循環節,求LCM就好了
介紹一下什麽是循環節:
1 2 3 4 5
4 1 5 2 3
1->4->2->1
(1,4,2)為一個循環節,長度為3
1 #include<cstdio> 2 const int maxn=1005; 3 int n; 4 int a[maxn]; 5 int gcd(int a,intb) 6 { 7 return b==0?a:gcd(b,a%b); 8 } 9 int lcm(int a,int b) 10 { 11 return a/gcd(a,b)*b; 12 } 13 int main() 14 { 15 while(scanf("%d",&n)==1) 16 { 17 for(int i=1;i<=n;i++) scanf("%d",&a[i]); 18 int ans=1; 19 for(int i=1;i<=n;i++) 20 { 21int tmp=a[i]; 22 int cnt=1; 23 while(tmp!=i) 24 { 25 tmp=a[tmp]; 26 cnt++; 27 } 28 ans=lcm(ans,cnt); 29 } 30 printf("%d",ans); 31 } 32 return 0; 33 }
超級超級簡單的模擬
置換群及其應用