hiho一下 第167周
2017-09-10 20:02
176 查看
题目1 : 数组重排
时间限制:10000ms单点时限:1000ms
内存限制:256MB
描述
小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 。
输出
输出最少重排的次数。样例输入
3 2 3 1
样例输出
3
可以找出每个数回到原位置的次数,然后求n个数回到原位置的最小公倍数时间O(n^2);
#include<iostream>
#include<string>
#include<cstring>
#include<stdio.h>
#include<vector>
#include <algorithm>
#include<math.h>
using namespace std;
int gb(int x,int y)
{
int a=x,b=y;
int c=a%b;
while(c!=0)
{
a=b;
b=c;
c=a%b;
}
return x/b*y;
}
int main()
{
int a[110]={0};
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int ss=1;
for(int i=1;i<=n;i++)
{
int s=1;
int t=a[i];
while(t!=i)//i回到原位置次数
{
t=a[t];
s++;
}
ss=gb(ss,s);
}
printf("%d\n",ss);
}
相关文章推荐
- hiho一下第三周 kmp算法。
- hiho一下 第122周 后缀数组三·重复旋律3
- hiho一下 第110周 floyd + 贪心 + 倍增
- 【hiho一下】 最近公共祖先 一
- 【hiho一下 第146周】子矩阵求和
- hiho一下 第二十三周---最短路径·一:Dijkstra算法
- hiho一下 第140周 清理海报
- hiho一下 第139周
- hiho一下 第三十七周二分·二分查找之k小数
- hiho一下 第三十九周(逆序数)
- hiho一下·41 骨牌覆盖问题·一(矩阵快速幂·费波拉契)
- ACM 粗心永远AC不了系列——Demo Day|三维DP问题,机器人寻路,hiho一下第150周
- hiho一下 第四十四周 博弈游戏
- hiho一下 第四十八周题目1 : 拓扑排序·二
- hiho一下 第156周 岛屿 (dfs)
- hiho一下 194周(高斯消元)
- hiho一下 第五十一周(有向图欧拉路径)51
- hiho一下 欧拉路三
- hiho一下 连通性·三 强连通分量
- hiho一下 第160周 压缩字符串