Time Limit: 1 second

Memory Limit: 32 MB

【问题描述】

每个学年的开始,高一新生们都要进行传统的军训。今年有一个军训教官十分奇怪,他为了测试学员们的反应能力,每次吹哨后学员们都会变换位置。每次左数第I位学员都会站到第ai个位置,经过若干次之后,队伍又会回到原来的样子。你的任务是计算n个人的队伍至少经过多少次之后,队伍恢复到原来样子。

【输入格式】

输入文件的第一位包含一个整数N(0<N10000),表示队伍的人数。
接下来N行,每行一个正整数ai表示左起第i个人接下来出现在左起第ai个位置上。

【输出格式】

仅包括一行,一个正整数M,表示军官居最少的吹哨次数。

【输入样例1】

5
2
3
4
5
1

【输出样例1】

5

【数据规模】

对于30%的数据,有N ≤100;
对于100%的数据,有N ≤10000;
对于全部数据,答案均在64位整数范围之内。

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t013

【题意】



中文题..

【题解】



那个变化位置的序列最后肯定能够形成若干个环的;

每个环的大小就是每个人回到原来位置所需要的步骤数;

那么求这几个环的大小的最小公倍数就好了;

这里我先把环的大小这些数字质因数分解一下;

然后按照每个因数出现次数最多的,作为这个因数的出现次数;

然后每个因数^(因数的出现次数)全部乘起来就好;

先求gcd再相乘除它也能求最小公倍数;

但好像会超时.

(没看到题目下面的数据范围,写了个高精度…)



【完整代码】

#include <cstdio>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <cmath>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%I64d",&x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int MAXN = 1e4+100; int a[MAXN],n;
bool bo[MAXN];
vector <int> v,what,zhi;
int num[MAXN],ans[MAXN],al; bool is(int x)
{
double t = x;
int len = int(sqrt(t));
rep1(i,2,len)
if (x%i==0)
return false;
return true;
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
rei(n);
rep1(i,1,n)
rei(a[i]);
rep1(i,2,n)
if (is(i))
zhi.pb(i);
rep1(i,1,n)
if (!bo[i])
{
int j = i,cnt = 0;
while (!bo[j])
{
bo[j] = true;
cnt++;
j = a[j];
}
v.pb(cnt);
}
int len = v.size();
rep1(i,0,len-1)
{
int now = 2,x = v[i],ii = 0,len2 = zhi.size();
while (ii<=len2-1 && now<=x)
{
now = zhi[ii];
if (x%now==0)
{
int cnt = 0;
while (x%now==0)
{
cnt++;
x/=now;
}
if (num[now]==0)
{
num[now] = cnt;
what.pb(now);
}
else
num[now] = max(num[now],cnt);
}
ii++;
}
}
al = 1;
ans[1] = 1;
len = what.size();
rep1(i,0,len-1)
{
int len2 = num[what[i]];
rep1(j,1,len2)
{
int x = 0;
rep1(k,1,al)
{
ans[k]= ans[k]*what[i]+x;
x = ans[k]/10;
ans[k] = ans[k]%10;
}
while (x>0)
{
al++;
ans[al] = x;
x = ans[al]/10;
ans[al] = ans[al]%10;
}
}
}
rep2(i,al,1)
printf("%d",ans[i]);
return 0;
}

【t013】无聊的军官的更多相关文章

  1. 无聊的人用JS实现了一个简单的打地鼠游戏

    直入正题,用JS实现一个简单的打地鼠游戏 因为功能比较简单就直接裸奔JS了,先看看效果图,或者 在线玩玩 吧 如果点击颜色比较深的那个(俗称坏老鼠),将扣分50:如果点击颜色比较浅的那个(俗称好老鼠) ...

  2. [无聊的事-连载之连开100个VS] 折腾你的骚机吧,骚年们!!!

    [无聊的事-连载之连开100个VS] 折腾你的骚机吧,骚年们!!! 只有8G内存的,用这个:打开你的CMD命令提示符如果只装了Visual Studio 2010,用这条命令,打开50个VSfor / ...

  3. 一个无聊的python + opencv 示例

    opencv不用多说,先推荐一个给力的教程: https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_tutor ...

  4. Python无聊的总结

    在公司无聊的时候看了前辈写的python代码,突然发现一个比较好玩的python表达式: lambda x,y:x+y 咋一看,这个应该类似方法之类的,上网查了查,所以特此总结下 lambda:上代码 ...

  5. Python的高级特性10:无聊的@property

    @property装饰器其实有点无聊,单独拿出来作为一个知识点其实没必要,尽管它可以将方法变成属性,让get和set方法更好用,但是,它破坏了python的简洁(不是代码的简洁而是指语法上). 下面来 ...

  6. 暑假热身 E. 无聊的LSY

    LSY大牛没事就爱玩游戏,包括很多很无聊的游戏.某日,LSY大牛又找到了一个无聊的游戏:每一局游戏的开始,LSY大牛将代表自己的棋子放在一个线性棋盘的最左端(第0个格子,可以认为向右端无限延伸),接着 ...

  7. 一件关于数据库日志log的无聊事情

    为何说是无聊的记录呢? 因为事先把问题想复杂了,事后发现的时候觉得更是无聊的行为.还是写下来,毕竟很少弄这么无聊的事情. 事情起因是需要给服务器做性能基数(baseline),用sqldiag 提取了 ...

  8. POJ 3371 Flesch Reading Ease 无聊恶心模拟题

    题目:http://poj.org/problem?id=3371 无聊恶心题,还是不做的好,不但浪费时间而且学习英语. 不过为了做出点技术含量,写了个递归函数... 还有最后判断es,ed,le时只 ...

  9. 工作无聊,闲来无事,自己学习 android入门

    工作无聊,闲来无事,自己学习. 最近几天看了看有关android的UI设计,布局以及android有关控件的知识,算是进一步了解了 android的相关内容. 明天就是周末了,明天及后天,我打算开始学 ...

随机推荐

  1. 2018-9-30-C#-winforms-输入颜色转换颜色名

    title author date CreateTime categories C# winforms 输入颜色转换颜色名 lindexi 2018-09-30 18:27:49 +0800 2018 ...

  2. PHP闭包实现函数的自调用实现递归

    根据pathinfo访问对应得controller,如ip:port/home/index/index则会访问home目录下的IndexController的index方法:如果不指定pathinfo ...

  3. android非硬件加速绘制简单流程

    这里的硬件加速是指openGL + GPU 如果不适用硬件加速: 1 ViewRootImpl.java draw:if (!dirty.isEmpty() || mIsAnimating || ac ...

  4. js将canvas保存成图片并下载

    <canvas id="canvas" width="400" height="400"></canvas> < ...

  5. 好玩又实用,阿里巴巴开源混沌工程工具 ChaosBlade

    减少故障的最好方法就是让问题经常性的发生.在可控范围或环境下,通过不断重复失败过程,持续提升系统的容错和弹性能力. 那么,实施一次高效的混沌工程实验,需要几步呢? 答案:2 步. ① 登陆 Chaos ...

  6. 未能加载文件或程序集 XXX 或它的一个依赖项。参数错误

    引发原因 :电脑突然蓝屏重启 解决方法:删除 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files 下的所有文件 ...

  7. html5之div,article,section区别与应用

    div 块级元素,在里面的内容会自动开始新行,可以定义文档中的分区或节,把文档分割成独立,不同的部分 本身没有什么语义,更适合帮助布局,进行样式化. <div> </div> ...

  8. Uva 568 【大整数】

    UVa568 题意:求N!(N<=10000)的最后一位非0数. 10000以内5^5 = 3125最多可以影响后5位.所以直接保存后五位就行. #include<iostream> ...

  9. ssh 出错 Permission denied (publickey,password).

    将客户端的~/.ssh/know_hosts 文件删掉试试 ssh debug信息 ssh -vvv xxx@192.168.1.111

  10. TreeSet的运用之使用内部比较器实现自定义有序(重要)

    Student.java package com.sxt.set3; /* * TreeSet:有序 * implements Comparable<Student> * 如果用内部比较器 ...