【题解】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 ...
最新文章
- [SDOI2009]HH的项链
- Spring BeanDefinitionRegistryPostProcessor BeanPostProcessor作用
- OpenGL envmapsphere球形环境图的实例
- 金钱能让人更快乐吗?手把手教你用机器学习找到答案
- Warning: lio_listio returned EAGAIN Performance degradation may be seen
- 华擎 j3455 时钟 linux,经验 篇一:华擎J3455 硬改MAC地址
- 前台系统(内容管理)
- ActiveX:ActiveX控件安装、dllregisterserver的调用失败
- 单片机 AD/DA数模转换
- 径向基神经网络(rbfn)进行函数插值,代码实现
- linux系统克隆后eth0不见了(IP地址没有了)
- D3D11、D3D12开发中CreateSwapChain返回DXGI_ERROR_INVALID_CALL(0x887A0001)错误的坑
- obj-y和obj-m 的区别
- 电脑管家急救箱linux,电脑管家也出系统急救箱, 杀毒能力不输360!
- Excel四舍六入五单双公式
- 咸鱼笔记—git版本创建与回退
- Review: Structure and function of complex brain networks——复杂大脑网络的结构和功能
- [极客大挑战 2019]Secret File 1
- AutoField: Automating Feature Selection in Deep Recommender Systems 阅读笔记
- codeforces 1311c