【题解】LuoGu5151:HKE与他的小朋友
原题传送门
题目描述
现在有n个座位编号为11至nn,这些小朋友也编号11至nn。一开始所有小朋友都坐在相应的座位上。HKE的游戏可用一个n的排列A(A_1,A_2\cdots A_nA(A
1
,A
2
⋯A
n
)表示。一轮游戏时,对于所有的1\leq i\leq n1≤i≤n,坐在位置ii上的小朋友坐到位置A_iA
i
上。
现在游戏进行了kk轮,HKE想知道游戏结束后,位置1,2\cdots n1,2⋯n分别坐了几号小朋友?
输入输出格式
输入格式:
第一行n,kn,k。
第二行A_1,A_2\cdots A_nA
1
,A
2
⋯A
n
输出格式:
一行n个数表示位置1,2……n1,2……n上的小朋友的编号
输入样例#1:
5 5
2 3 1 5 4
输出样例#1:
2 3 1 5 4
输入样例#2:
5 4
2 3 1 5 4
输出样例#2:
3 1 2 4 5
说明
30%的数据,n≤1000,k≤1000n\leq1000,k\leq1000n≤1000,k≤1000
100%的数据,n≤100000,k≤231−1n\leq100000,k\leq2^{31}-1n≤100000,k≤231−1
正解是倍增,复杂度O(nlogk)O(nlogk)O(nlogk),这里有一种朴素的O(n)O(n)O(n)做法
用基本的图论做法,找环,并同时计算出环的长度
然后按环,一个环一个环的处理,每个环中的元素往后一起移kmod环长度k mod 环长度kmod环长度个位子,所以这样能做到每个点只走一遍
Code:
/*
5 5
2 3 1 5 4
*/
#include <bits/stdc++.h>
#define res register int
#define ll long long
#define maxn 100010
using namespace std;
int n, m, a[maxn], loop[maxn], print[maxn];inline int read(){int s = 0, w = 1;char c = getchar();while (c < '0' || c > '9'){if (c == '-') w = -1; c = getchar();}while (c >= '0' && c <= '9') s = (s << 1) + (s << 3) + (c ^ 48), c = getchar();return s * w;
}inline int calc(int u, int s){loop[u] = s;if (loop[a[u]]) return s;loop[u] = calc(a[u], s + 1);return loop[u];
}int main(){n = read(), m = read();for (res i = 1; i <= n; ++ i) a[i] = read();for (res i = 1; i <= n; ++ i) if (!loop[i]) loop[i] = calc(i, 0);for (res i = 1; i <= n; ++ i)if (!print[i]){int u = i, v = i; for (ll k = m % loop[i]; k; -- k) v = a[v];while (!print[v]){print[v] = u; u = a[u]; v = a[v];}}for (res i = 1; i <= n; ++ i) printf("%d ", print[i]);return 0;
}
【题解】LuoGu5151:HKE与他的小朋友相关推荐
- [LGOJ5151]HKE与他的小朋友——[缩点+vector]
[题目描述] HKE带着nnn个小朋友做游戏 现在有nnn个座位编号为111至nnn,这些小朋友也编号111至nnn.一开始所有小朋友都坐在相应的座位上.HKE的游戏可用一个nnn的排列A(A1,A2 ...
- 2019.1.31及以前
[以前的博客] https://www.luogu.org/blog/lizehon/ NOIP2018游记 [环形DP]Naptime [单调队列]最大子序和 [单调队列] 环路运输 [模板]高斯消 ...
- 【BZOJ】【1045/1465】【HAOI2008】糖果传递
思路题/神奇的转化-- orz hzwer 或许这个思路可以从单行而非环形的递推中找到?(单行的时候,从左往右直接递推即可-- 感觉好神奇>_<脑残患者想不出-- P.S.话说在$n\le ...
- NOIP2016普及组复赛第一题的AC程序加题解pascal
P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同.为了公平起 见,P老师决定只买同一种包装的铅笔.商店不允许 ...
- HUST - 1016 幼儿园小朋友们的难题(水题)
幼儿园的小朋友们一直在研究一个问题-- 如何在一个长长的句子中找到最大的那个非负整数(不存在负数).你很不幸的被他们拖住了,又很不幸的被他们叫去执行这个任务,你非常得不爽! 因为你觉得这么简单的问题简 ...
- 剑指offer之46-50题解
剑指offer之46-50题解 目录 孩子们的游戏 求1+2+3+-+n 不用加减乘除做加法 把字符串转换成整数 数组中重复的数字 46. 孩子们的游戏 (一)题目描述 每年六一儿童节,牛客都会准备一 ...
- 牛客题霸 [ 孩子们的游戏] C++题解/答案
牛客题霸 [ 孩子们的游戏] C++题解/答案 题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样 ...
- 【bzoj题解】1001 狼抓兔子
题目描述 现在小朋友们最喜欢"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- HDU 2208 唉,可爱的小朋友(DFS)
唉,可爱的小朋友 Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
最新文章
- 7 orm 有批量更新_ORM之SQLAlchemy
- WARN RestSubmissionClient: Unable to connect to server spark://master:
- 3 帮助命令、用户管理、压缩
- 公司间交易学习笔记---概述
- android 下载器布局,Android Studio下载约束布局失败
- STM32工作笔记0031---基于STM32F103C8自己实现的跑马灯实验_使用STLINK调试
- C/C++获取文件大小
- 游戏开发之使用类封装双链表数据结构及双链表迭代器初版(C++基础)
- NonEmpty和Hierarchize嵌套的bug
- Android如何获取唯一ID
- 华为网吧服务器型号,网吧服务器 主机配置
- 一家麻辣烫店如何实现月净利五万
- 解决NUC8豆子峡谷装黑苹果键盘错位的设置
- 【IIS问题】——默认网站localhost无法打开,错误类型404
- 数学笔记25——弧长和曲面面积
- m3u8转mp4无损转换的方法和技巧
- mac设置共享屏幕 苹果mac屏幕共享设置详细教程
- mathtype向上取整函数
- 一个段子来解释数据挖掘
- 上海户籍新政不是被迫作秀 符合条件人员会逐年增加
热门文章
- 谷歌浏览器安装了插件也无法使用
- [计算机毕业设计]机器学习期货大数据的成交量优化分析研究
- 壮乡文化html网页,小学“传承壮乡文化 走进三月三”的活动方案.docx
- 【CodeForces】893 - D Credit Card (贪心)
- RTMP协议深度解析:从原理到实践,掌握实时流媒体传输技术
- Java的集合框架思维导图
- 关于使用StrollingWolf工具去除代码注释的一些注意事项
- Redis概述下载与安装使用redis
- 明星产品!种质资源数字化一站式解决方案!
- 粤嵌python培训后工资有多少