hihoCoder1330—数组重排
来源:互联网 发布:极限编程和瀑布模型 编辑:程序博客网 时间:2024/06/05 14:52
题目链接:传送门
题目1 : 数组重排
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
- 样例输入
32 3 1
- 样例输出
3
描述
小Hi想知道,如果他每次都按照一种固定的顺序重排数组,那么最少经过几次重排之后数组会恢复初始的顺序?
具体来讲,给定一个1 - N 的排列 P,小Hi每次重排都是把第 i 个元素放到第 Pi个位置上。例如对于 P = (2, 3, 1),假设初始数组是(1, 2, 3),重排一次之后变为(3, 1, 2),重排两次之后变为(2, 3, 1),重排三次之后变回(1, 2, 3)。
被排数组中的元素可以认为是两两不同的。
输入
第一行一个整数 N ,代表数组的长度。 (1 ≤ N ≤ 100)
第二行N个整数,代表1 - N 的一个排列 P 。
输出
输出最少重排的次数。
#include <iostream>#include <cstdio>#include <algorithm>#include <cstdlib>#include <cstring>using namespace std;const int N = 150;int data[N],tick[N];int gcd(int a,int b){if(b == 0) return a;else return gcd(b,a%b);}int lcm(int a,int b){return a/gcd(a,b)*b;}int solve(int u){int cnt = 1,v = u;tick[u] = 1;while(1){v = data[v];tick[v] = 1;cnt++;if(data[v] == u) break;}return cnt;}int main(){int n;while(~scanf("%d",&n)){memset(tick,0,sizeof(tick));for( int i = 1 ; i <= n ; ++i ){scanf("%d",&data[i]);}int ans = 1;for( int i = 1 ; i <= n ; ++i ){if(!tick[i]){ans = lcm(ans,solve(i));} }printf("%d\n",ans);}return 0;}
阅读全文
0 0
- hihoCoder1330—数组重排
- hihoCoder1330 数组重排
- 数组重排
- 随机数组重排
- 数组重排问题
- Hihocoder 数组重排
- Javascript数组重排
- shuffle()重排数组
- 数组重排(贪心)
- hihocoder 数组重排
- 将一个数组随机重排
- 数组重排,O(1)空间
- 百度笔试题--数组重排
- hihoCoder 1523 : 数组重排2
- hihocoder 1523 : 数组重排2
- hihoCoder 1523 : 数组重排2
- hihocoder #1539 : 数组重排3
- hihocoder167周-最小公倍数-数组重排
- 深度学习简介
- RobotFrameWork(十)Remote远程库使用
- CycleGAN(以及DiscoGAN和DualGAN)简介
- leetcode 98. Validate Binary Search Tree DFS深度优先搜索 + 一个错误做法
- C++ priority_queue内元素优先级的设置以及注意事项
- hihoCoder1330—数组重排
- java8 接口之间继承与覆盖
- centos 6.5下安装、配置并启动SSH远程访问
- 最简单完全退出应用方式(活动依次出栈)
- bellman-Ford 算法(转)
- 提高组 模拟题训练
- jdbc连接到数据库
- Matlab——robotics toolbox
- vim 保存只读文件的修改