C++每周一练 第一周

洗牌

难度:

时间限制:1s内存限制:256M

【题目描述】

给定一个整数 𝑛n,表示 𝑛n 张牌,牌的编号为 11 到 𝑛n。

再给定一个洗牌置换 𝑓1,𝑓2,…,𝑓𝑛f1​,f2​,…,fn​,进行一次洗牌操作时,应将第 11 号位置的牌交换到第 𝑓1f1​ 号位置,将第 𝑖i 号位置的牌交换到第 𝑓𝑖fi​ 号位置。保证 𝑓f 是一个 11 到 𝑛n 的排列(即 11 到 𝑛n 中的每个数字出现且只出现一次)。

一开始,牌的顺序为 1,2,⋯,𝑛1,2,⋯,n。给定一个整数 𝑘k,请输出经过 𝑘k 次洗牌后牌的顺序。

【输入格式】

第一行两个整数 𝑛,𝑘n,k;

第二行 𝑛n 个整数 𝑓1,𝑓2,…,𝑓𝑛f1​,f2​,…,fn​。

【输出格式】

一行 𝑛n 个整数 𝑎1,𝑎2,…,𝑎𝑛a1​,a2​,…,an​,表示经过 𝑘k 次洗牌后牌的顺序。

【输入输出样例#1】

输入#1

4 2
4 1 2 3

复制

输出#1

3 4 1 2

复制

【输入输出样例#2】

输入#2

3 100000
1 2 3

复制

输出#2

1 2 3

复制

【输入输出样例#3】

输入#3

5 3
2 3 4 5 1

复制

输出#3

3 4 5 1 2

复制

【说明提示】

样例 11 解释:

初始时四张牌的顺序:1 2 3 41 2 3 4

洗牌一次之后的顺序:2 3 4 12 3 4 1

洗牌两次之后的顺序:3 4 1 23 4 1 2

样例 22 解释:

每次洗牌都不会改变牌的位置。

样例 33 解释:

初始时五张牌的顺序:1 2 3 4 51 2 3 4 5

洗牌一次之后的顺序:5 1 2 3 45 1 2 3 4

洗牌两次之后的顺序:4 5 1 2 34 5 1 2 3

洗牌三次之后的顺序:3 4 5 1 23 4 5 1 2

【数据范围】

对 30%30% 的数据保证:1≤𝑛≤103,1≤𝑘≤1041≤n≤103,1≤k≤104;

对 60%60% 的数据保证:1≤𝑛≤5×103,1≤𝑘≤1061≤n≤5×103,1≤k≤106;

对 100%100% 的数据保证:1≤𝑛≤105,1≤𝑘≤1091≤n≤105,1≤k≤109。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值