随笔 - 32  文章 - 2  trackbacks - 0
<2009年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(3)

随笔档案

文章档案

搜索

  •  

积分与排名

  • 积分 - 8797
  • 排名 - 1247

最新评论

阅读排行榜

评论排行榜

http://acm.timus.ru/problem.aspx?space=1&num=1024
找出所有的循环,计算循环长度的最小公倍数
 1 #include <iostream>
 2 using namespace std;
 3 int n;
 4 int p[1001];
 5 bool v[1001];
 6 long long int an,alist[1001];
 7 int vnum;
 8 int mm;
 9 
10 long long int gcd(long long int a,long long int b){
11     if (b==0return a;
12     else return gcd(b,a%b);
13     }
14 
15 void calc(int x){
16     int deep=0;
17     while (!v[x]){
18         v[x]=true;
19         x=p[x];
20         ++deep;
21         }
22     alist[++an]=deep;
23     if (deep>mm) mm=deep;
24     }
25 
26 int main(){
27     scanf("%d",&n);
28     vnum=n;
29     for (int i=1;i<=n;++i) scanf("%d",&p[i]);
30     for (int i=1;i<=n;++i) if (!v[i]) calc(i);
31     long long int ans=mm;
32     for (int i=1;i<=an;++i) ans=(long long)ans*(long long)alist[i]/(long long)gcd(ans,alist[i]);
33     cout<<ans;
34     }
35 


posted on 2008-11-04 11:23 Joseph 阅读(332) 评论(2)  编辑 收藏 引用

FeedBack:
# re: URAL 1024 Permutations 2009-06-07 13:08 zjhuijsj@163.com
测试数据是怎么得到得  回复  更多评论
  
# re: URAL 1024 Permutations 2009-06-13 21:51 Joseph
@zjhuijsj@163.com
讨论里面有
  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理