首页 > 代码库 > poj 2369 Permutations(置换群)
poj 2369 Permutations(置换群)
题目链接:poj 2369 Permutations
题意:
给你一个置换序列,问你循环周期是多少。
题解:
找到每个子循环周期,总体的循环周期就是这些子循环周期的最小公倍数。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define F(i,a,b) for(int i=a;i<=b;++i) 5 using namespace std; 6 7 const int N=1010; 8 int n,a[N],vis[N],Q[N],ed; 9 10 int main() 11 { 12 while(~scanf("%d",&n)) 13 { 14 F(i,1,n)scanf("%d",a+i),vis[i]=0; 15 ed=0; 16 F(i,1,n)if(!vis[i]) 17 { 18 vis[i]=1; 19 int cnt=1,u=a[i]; 20 while(u!=i)cnt++,vis[u]=1,u=a[u]; 21 Q[++ed]=cnt; 22 } 23 int ans=Q[1]; 24 F(i,1,ed)ans=ans/__gcd(Q[i],ans)*Q[i]; 25 printf("%d\n",ans); 26 } 27 return 0; 28 }
poj 2369 Permutations(置换群)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。