Codeforces 524C Idempotent functions
题目链接: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相关推荐
- Codeforces 524C Idempotent functions
题目链接:http://codeforces.com/problemset/problem/542/C C. Idempotent functions time limit per test 1 se ...
- 【CodeForces - 789C】Functions again(最大子段和变形,dp,思维)
题干: Something happened in Uzhlyandia again... There are riots on the streets... Famous Uzhlyandian s ...
- CSUOJ 1525 Algebraic Teamwork
Problem A Algebraic Teamwork The great pioneers of group theory and linear algebra want to cooperate ...
- grpc调用_避免使用套接字远程过程调用以及如何使用grpc进行程序通信
grpc调用 As we all know, it's common to use sockets to create a communication channel between 2 progra ...
- codeforces 757e Bash Plays with Functions
题意: 给你两个数 n和r 可以做r次分解 当r大于0 n可以分解成两个因子u和v u*v=n 当r 等于0 n分解出的两个因子的gcd要为1 如题意所给的公式来计算最终结果 思路: 仔细观察 在 ...
- 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 ...
- Codeforces数学1600day3[数学CodeForces - 1213D2, CodeForces - 1165E 数论,CodeForces - 1165D 因子分解]
ps:day2太水了不写qwq A - Equalizing by Division (hard version) CodeForces - 1213D2 题目大意:给你n个数和一个k,然后你可以执行 ...
- CodeForces 375D Tree and Queries
传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...
- 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)
题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...
最新文章
- 多项式拟合缺点_机器学习——机器学习算法优缺点综述
- 安装CM 6.3.1和CDH 6.3.2
- Matlab求重复数字的个数tabulate
- c语言插入排序算法_插入排序算法,流程图和C,C ++代码
- B2.Java代码查错
- 前端系统化学习【JS篇】:(三)Javascript中的命名规范
- 微信表情图像代表什么意思_电表型号怎么选 型号字母都代表什么意思
- jqGrid 项目总结
- Collectors.mapping()
- SpringMVC深度探险(四) —— SpringMVC核心配置文件详解
- vs2010开发activex(MFC)控件/ie插件(三),js调用ocx控件的接口函数
- android使用线程计时器,计时器的Android线程
- 测试用例(功能用例)——资产盘点
- 七堂思维成长课-读后感
- not allowed to launch “localhost:81/XXXXX“
- 游泳馆馆所以及会员管理系统
- 支持iframe的div分隔线插件
- vi linux insert切换该行第一个字符,Linux之Vi命令讲解
- Js编码和Java后台解码
- linux下贪吃蛇代码,贪吃蛇 linux 程序
热门文章
- 流浪的python博客园_python学习心得第一章
- oracle脱机什么意思,脱机的是什么意思
- linux runqueue定义,linux – 了解rt_rq(实时runqueue)内核中数据成员的使用
- 林锐 高质量c语言编程下载,新年献礼:Go语言深度入门手册
- 不愿意和别人打交道_始终和人保持距离,最不合群的3星座,孤僻却有真本事,能成大事...
- linux 系统盘无法ls,linux – ls:阅读目录.:输入/输出错误
- 利用trunk实现vlan内通信_实现不同VLAN间通信——单臂路由
- mvc html传参数乱码,SpringMVC Controller 接收页面传递的中文参数出现乱码
- 《零基础》MySQL 安装(二)
- mysql 获取年预提,【判断题】正确核算待摊费用和预提费用,有助于划分本期费用与非本期费用的界限。...