题目链接:http://codeforces.com/problemset/problem/542/C

题目大意:给定一种运算f,对于输入的数组来说,一步操作,f(x) = a[x],两步操作,f^2(x) = a[a[x]]....倘若每次进行k步操作之后,得到的都是同一个数,即k为符合条件的步数。求出能令所有数都符合条件的最小步数。

初步我们可以很快想到,如果能求出每个数的符合条件的最小步数,然后求出这些步数的最小公倍数即可。但是需要注意的是,对于一开始并没有直接进入循环的情况,即"6"字形的情况,我们要分开求出多余的长度len[i]和循环节长度step[i],选出最长的MAXlen,ans即为MAXlen对所有step[i]的最小公倍数的上取整。

AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>
#include <cmath>
#include <algorithm>
using namespace std;
#define MAXN 500
typedef long long LL;
int n;
int a[MAXN];
LL step[MAXN];
int vis[MAXN], v[MAXN];
int main() {LL ans, maxNum = 0;scanf("%d", &n);for(int i = 1; i <= n; i++)scanf("%d", &a[i]);for(int i = 1; i <= n; i++) {memset(vis, 0, sizeof(vis));stack<int> s;int j;for(j = i; !vis[j]; j = a[j]) {vis[j] = 1;s.push(j);}LL num = 1;while(s.top() != j) {s.pop(); num++;}s.pop();step[i] = num;maxNum = max(maxNum, (LL)s.size());}ans = step[1];for(int i = 1; i <= n; i++) {ans = ans / __gcd(ans, step[i]) * step[i];}LL temp = maxNum / ans;if(maxNum % ans || maxNum == 0) temp++;ans = temp * ans;printf("%I64d\n", ans);return 0;
}

  

转载于:https://www.cnblogs.com/gaoxiang36999/p/4484456.html

Codeforces 524C Idempotent functions相关推荐

  1. Codeforces 524C Idempotent functions

    题目链接:http://codeforces.com/problemset/problem/542/C C. Idempotent functions time limit per test 1 se ...

  2. 【CodeForces - 789C】Functions again(最大子段和变形,dp,思维)

    题干: Something happened in Uzhlyandia again... There are riots on the streets... Famous Uzhlyandian s ...

  3. CSUOJ 1525 Algebraic Teamwork

    Problem A Algebraic Teamwork The great pioneers of group theory and linear algebra want to cooperate ...

  4. grpc调用_避免使用套接字远程过程调用以及如何使用grpc进行程序通信

    grpc调用 As we all know, it's common to use sockets to create a communication channel between 2 progra ...

  5. codeforces 757e Bash Plays with Functions

    题意: 给你两个数 n和r 可以做r次分解 当r大于0 n可以分解成两个因子u和v   u*v=n 当r 等于0 n分解出的两个因子的gcd要为1 如题意所给的公式来计算最终结果 思路: 仔细观察 在 ...

  6. CodeForces 757 E.Bash Plays with Functions(积性函数+dp)

    Description 定义f0(n)f_0(n)为满足p⋅q=n,gcd(p,q)=1p\cdot q=n,gcd(p,q)=1的有序对(p,q)(p,q)对数,定义fr+1(n)=∑u⋅v=nfr ...

  7. Codeforces数学1600day3[数学CodeForces - 1213D2, CodeForces - 1165E 数论,CodeForces - 1165D 因子分解]

    ps:day2太水了不写qwq A - Equalizing by Division (hard version) CodeForces - 1213D2 题目大意:给你n个数和一个k,然后你可以执行 ...

  8. CodeForces 375D Tree and Queries

    传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...

  9. 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)

    题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...

最新文章

  1. 多项式拟合缺点_机器学习——机器学习算法优缺点综述
  2. 安装CM 6.3.1和CDH 6.3.2
  3. Matlab求重复数字的个数tabulate
  4. c语言插入排序算法_插入排序算法,流程图和C,C ++代码
  5. B2.Java代码查错
  6. 前端系统化学习【JS篇】:(三)Javascript中的命名规范
  7. 微信表情图像代表什么意思_电表型号怎么选 型号字母都代表什么意思
  8. jqGrid 项目总结
  9. Collectors.mapping()
  10. SpringMVC深度探险(四) —— SpringMVC核心配置文件详解
  11. vs2010开发activex(MFC)控件/ie插件(三),js调用ocx控件的接口函数
  12. android使用线程计时器,计时器的Android线程
  13. 测试用例(功能用例)——资产盘点
  14. 七堂思维成长课-读后感
  15. not allowed to launch “localhost:81/XXXXX“
  16. 游泳馆馆所以及会员管理系统
  17. 支持iframe的div分隔线插件
  18. vi linux insert切换该行第一个字符,Linux之Vi命令讲解
  19. Js编码和Java后台解码
  20. linux下贪吃蛇代码,贪吃蛇 linux 程序

热门文章

  1. 流浪的python博客园_python学习心得第一章
  2. oracle脱机什么意思,脱机的是什么意思
  3. linux runqueue定义,linux – 了解rt_rq(实时runqueue)内核中数据成员的使用
  4. 林锐 高质量c语言编程下载,新年献礼:Go语言深度入门手册
  5. 不愿意和别人打交道_始终和人保持距离,最不合群的3星座,孤僻却有真本事,能成大事...
  6. linux 系统盘无法ls,linux – ls:阅读目录.:输入/输出错误
  7. 利用trunk实现vlan内通信_实现不同VLAN间通信——单臂路由
  8. mvc html传参数乱码,SpringMVC Controller 接收页面传递的中文参数出现乱码
  9. 《零基础》MySQL 安装(二)
  10. mysql 获取年预提,【判断题】正确核算待摊费用和预提费用,有助于划分本期费用与非本期费用的界限。...