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 }

时间: 2024-10-05 23:50:18

hihoCoder 数组重排的相关文章

hihocoder 1330 - 数组重排 - [hiho一下167周][最小公倍数]

题目链接:https://hihocoder.com/problemset/problem/1330 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi想知道,如果他每次都按照一种固定的顺序重排数组,那么最少经过几次重排之后数组会恢复初始的顺序? 具体来讲,给定一个1 - N 的排列 P,小Hi每次重排都是把第 i 个元素放到第 Pi个位置上.例如对于 P = (2, 3, 1),假设初始数组是(1, 2, 3),重排一次之后变为(3, 1, 2),重排两次之后

hihocoder1330 数组重排

题意:一个数组,每次把i位置的数移到pi位置,问要几次可以将数组重新排列回来 题解:计算每个数的周期,所有数的周期的lcm就是答案,复杂度O(n*n),一个循环里面的数周期都是一样的,标记一下,复杂度o(n) #include <bits/stdc++.h> #define maxn 110 #define ll long long using namespace std; ll a[maxn], dir[maxn]; map<ll,ll>mp; int main(){ ll n,

数组重排

1 function resetArray(arr) { 2 return arr.sort(function () { 3 return 0.5-Math.random(); 4 }); 5 } 6 var arr=[1,2,3,4,5]; 7 resetArray(arr); 8 console.log(arr);

hihocoder - [Offer收割]编程练习赛17

hihocoder - [Offer收割]编程练习赛17 题目1 : F1 Score 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和他的小伙伴们一起写了很多代码.时间一久有些代码究竟是不是自己写的,小Hi也分辨不出来了. 于是他实现了一个分类算法,希望用机器学习实现自动分类. 为了评价这个分类算法的优劣,他选出了N份有标记的代码作测试集,并决定用F1 Score作为评价标准. 给出N份代码的实际作者是不是小Hi以及分类算法预测的结果,请你计算F1 Sco

【转】js入门

英文原文 翻译原文 如果你以前有编程经验,但是一名前端JavaScript开发的初学者,那么一系列的术语和工具容易引起混淆.我们不会纠缠于细节的讨论,而是会纵览当前的“JavaScript生态圈”.这应该足够你找准方向,开启前端开发之旅. 关键术语显示为粗体.如果你想跳到可以工作的样板代码库,那么我已经将我的一些建议整理成了一个GitHub库. 客户端JavaScript是如何工作的,为什么要使用它? 关键术语:DOM(文档对象模型).JavaScript.async.AJAX 为了编写高效的前

javascript--”原路返回“

css代码: <style type="text/css"> * { margin: 0px; padding: 0px; font-family: "micsoft yahei","微软雅黑"; font-size: 15px; } div{ width: 50px; height: 50px; background: #f00; border-radius:5px ; -moz-border-radius: 5px; -webki

一线互联网常见的 14 个 Java 面试题,你颤抖了吗程序员

跳槽不算频繁,但参加过不少面试(电话面试.face to face 面试),面过大 / 小公司.互联网 / 传统软件公司,面糊过(眼高手低,缺乏实战经验,挂掉),也面过人,所幸未因失败而气馁,在此过程中不断查缺补漏,养成了踏实.追本溯源.持续改进的习惯,特此将自己经历过.构思过的一些面试题记录下来,如果答案有问题,欢迎拍砖讨论,希望能对找工作或者感兴趣的同学有所帮助,陆续整理中. 1. synchronized 和 reentrantlock 异同 相同点 都实现了多线程同步和内存可见性语义 都

浅谈FFT(快速傅里叶变换)

本文主要简单写写自己学习FFT的经历以及一些自己的理解和想法. FFT的介绍以及入门就不赘述了,网上有许多相关的资料,入门的话推荐这篇博客:FFT(最详细最通俗的入门手册),里面介绍得很详细. 为什么要学习FFT呢?因为FFT能将多项式乘法的时间复杂度由朴素的$O(n^2)$降到$O(nlogn)$,这相当于能将任意形如$f[k]=\sum\limits _{i+j=k}f[i]*f[j]$的转移方程的计算在$O(nlogn)$的时间内完成.因此对于想要进阶dp的同学来说,FFT是必须掌握的技能

一线互联网常见的14个Java面试题,你颤抖了吗程序员

跳槽不算频繁,但参加过不少面试(电话面试.face to face面试),面过大/小公司.互联网/传统软件公司,面糊过(眼高手低,缺乏实战经验,挂掉),也面过人,所幸未因失败而气馁,在此过程中不断查缺补漏,养成了踏实.追本溯源.持续改进的习惯,特此将自己经历过.构思过的一些面试题记录下来,如果答案有问题,欢迎拍砖讨论,希望能对找工作或者感兴趣的同学有所帮助,陆续整理中. synchronized和reentrantlock异同 相同点 都实现了多线程同步和内存可见性语义都是可重入锁不同点 实现机