Wang%%% 2020-10-17 09:25 采纳率: 0%
浏览 88

求大佬这道题的代码和思路

Slime

题目描述

小 Z 正在 van 游戏。

这个世界里有 n 只史莱姆,每只被打掉后会变成两只小史莱姆。

现在他的打法如下:

一开始的队列中有 n 只史莱姆,第 i 只编号为 i,被打死后会变成两只编号相同的小史莱姆,排在队列末尾。

小 Z 一路狂刷了许多只史莱姆后,想知道他撸死的第 m 只史莱姆的编号。

输入格式:

两个整数 n,m。

输出格式:

第 m 只史莱姆的编号。

输入样例 1:

2 3

输出样例 1:

1

样例解释:

撸死第一只(1)2 1 1

撸死第二只(2) 1 1 2 2

撸死第三只(1)1 2 2 1 1

括号里表示死亡的史莱姆编号,横线表示分裂后的史莱姆。

输入样例 2:

见 Slime2.in

输出样例 2:

见 Slime2.ans

T2. slime

数据范围:

对于 60%的数据 n,m<=1e6

对于 100%的数据 n,m<=1e18

  • 写回答

1条回答 默认 最新

  • 无敌的浩浩 2020-10-17 21:29
    关注

    这是对数据结构中队列的应用,这里因为要进行多次入队和出队、并增加元素,所以采用链队;
    重点是史莱姆编号的确定和遗传;
    一、如果不考虑保存初始史莱姆队列,思路如下:

    1.获得n,m;

    2.初始化史莱姆队列,即for循环n次,将{1、2、...、n}依次入队;

    3.再一个for循环,循环m次,每次将史莱姆队列队头出一个元素,并把这个元素数据连续入队两次;

    4.循环结束后,获取队尾的数据,即第m次出队元素的数据,它就是要求得的数据;

    5.输出打印上步得到的数据即可;

    二、如果要保存整个刷怪的过程队列,思路如下:

    1.获得n、m;
    2.先初始化史莱姆队列,同上;

    3.for循环m次,每次获取史莱姆队列队头元素的数据,并把这个元素数据连续入队两次;

    4.循环结束后,获取队尾的数据,即第m次出队元素的数据,它就是要求得的数据;

    5.输出打印上步得到的数据即可。

    大致的思路是这样的,若有瑕疵,也请其他大佬批评,优化。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题