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.输出打印上步得到的数据即可。

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

    评论

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题