原题传送门
题目描述
现在有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与他的小朋友相关推荐

  1. [LGOJ5151]HKE与他的小朋友——[缩点+vector]

    [题目描述] HKE带着nnn个小朋友做游戏 现在有nnn个座位编号为111至nnn,这些小朋友也编号111至nnn.一开始所有小朋友都坐在相应的座位上.HKE的游戏可用一个nnn的排列A(A1,A2 ...

  2. 2019.1.31及以前

    [以前的博客] https://www.luogu.org/blog/lizehon/ NOIP2018游记 [环形DP]Naptime [单调队列]最大子序和 [单调队列] 环路运输 [模板]高斯消 ...

  3. 【BZOJ】【1045/1465】【HAOI2008】糖果传递

    思路题/神奇的转化-- orz hzwer 或许这个思路可以从单行而非环形的递推中找到?(单行的时候,从左往右直接递推即可-- 感觉好神奇>_<脑残患者想不出-- P.S.话说在$n\le ...

  4. NOIP2016普及组复赛第一题的AC程序加题解pascal

    P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同.为了公平起 见,P老师决定只买同一种包装的铅笔.商店不允许 ...

  5. HUST - 1016 幼儿园小朋友们的难题(水题)

    幼儿园的小朋友们一直在研究一个问题-- 如何在一个长长的句子中找到最大的那个非负整数(不存在负数).你很不幸的被他们拖住了,又很不幸的被他们叫去执行这个任务,你非常得不爽! 因为你觉得这么简单的问题简 ...

  6. 剑指offer之46-50题解

    剑指offer之46-50题解 目录 孩子们的游戏 求1+2+3+-+n 不用加减乘除做加法 把字符串转换成整数 数组中重复的数字 46. 孩子们的游戏 (一)题目描述 每年六一儿童节,牛客都会准备一 ...

  7. 牛客题霸 [ 孩子们的游戏] C++题解/答案

    牛客题霸 [ 孩子们的游戏] C++题解/答案 题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样 ...

  8. 【bzoj题解】1001 狼抓兔子

    题目描述 现在小朋友们最喜欢"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形:   ...

  9. HDU 2208 唉,可爱的小朋友(DFS)

    唉,可爱的小朋友 Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

最新文章

  1. 7 orm 有批量更新_ORM之SQLAlchemy
  2. WARN RestSubmissionClient: Unable to connect to server spark://master:
  3. 3 帮助命令、用户管理、压缩
  4. 公司间交易学习笔记---概述
  5. android 下载器布局,Android Studio下载约束布局失败
  6. STM32工作笔记0031---基于STM32F103C8自己实现的跑马灯实验_使用STLINK调试
  7. C/C++获取文件大小
  8. 游戏开发之使用类封装双链表数据结构及双链表迭代器初版(C++基础)
  9. NonEmpty和Hierarchize嵌套的bug
  10. Android如何获取唯一ID
  11. 华为网吧服务器型号,网吧服务器 主机配置
  12. 一家麻辣烫店如何实现月净利五万
  13. 解决NUC8豆子峡谷装黑苹果键盘错位的设置
  14. 【IIS问题】——默认网站localhost无法打开,错误类型404
  15. 数学笔记25——弧长和曲面面积
  16. m3u8转mp4无损转换的方法和技巧
  17. mac设置共享屏幕 苹果mac屏幕共享设置详细教程
  18. mathtype向上取整函数
  19. 一个段子来解释数据挖掘
  20. 上海户籍新政不是被迫作秀 符合条件人员会逐年增加

热门文章

  1. 谷歌浏览器安装了插件也无法使用
  2. [计算机毕业设计]机器学习期货大数据的成交量优化分析研究
  3. 壮乡文化html网页,小学“传承壮乡文化 走进三月三”的活动方案.docx
  4. 【CodeForces】893 - D Credit Card (贪心)
  5. RTMP协议深度解析:从原理到实践,掌握实时流媒体传输技术
  6. Java的集合框架思维导图
  7. 关于使用StrollingWolf工具去除代码注释的一些注意事项
  8. Redis概述下载与安装使用redis
  9. 明星产品!种质资源数字化一站式解决方案!
  10. 粤嵌python培训后工资有多少