hihoCoder 数组重排
Posted zhazhalovecoding
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hihoCoder 数组重排相关的知识,希望对你有一定的参考价值。
找每个位置循环节的大小。
得到结果d1, d2, ....., dn。
最终结果cmd(d1, d2, ...., dn)。
水题。
题目链接:
http://hihocoder.com/contest/hihointerview11/problem/1
代码:
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 const int maxn = 100 + 10; 5 typedef long long int64; 6 7 int n; 8 int p[maxn]; 9 10 int64 cal(int a){ 11 int t = p[a], cnt = 1; 12 while(t != a){ 13 t = p[t]; 14 cnt++; 15 } 16 17 return (int64)cnt; 18 } 19 20 int64 gcd(int64 a, int64 b){ 21 if( b == 0 ) 22 return a; 23 return gcd(b, a%b); 24 } 25 26 int main(void){ 27 scanf("%d", &n); 28 29 for(int i = 1; i <= n; ++i){ 30 scanf("%d", &p[i]); 31 } 32 33 int64 a = cal(1); 34 int64 ans = a; 35 for(int i = 2; i <= n; ++i){ 36 int64 b = cal(i); 37 ans = ans * b / gcd(ans, b); 38 } 39 40 printf("%d\\n", (int)ans); 41 42 return 0; 43 }
以上是关于hihoCoder 数组重排的主要内容,如果未能解决你的问题,请参考以下文章
NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段