#6815. 小苹果PLUS

小苹果PLUS

小苹果PLUS

你是我的小丫,小苹果,哎哟喂,学的这么好一定是NOI金牌吧

题目描述

小 Y 的桌子上放着 n 个苹果,从左到右排成一列。

每个苹果都有一个唯一编号:

1 2 3 ... n

小苞每天都会按照固定规则拿走一些苹果。

每天操作如下:

  1. 从当前苹果队列的最左侧开始;
  2. 从第 1 个苹果开始,每隔 2 个苹果拿走 1 个苹果;
  3. 被拿走的苹果会从队列中消失;
  4. 剩余苹果保持原来的相对顺序,重新排列成一列;
  5. 第二天继续执行相同操作。

例如:

当前苹果:

1 2 3 4 5 6 7 8

第 1 天拿走:

1 4 7

剩余:

2 3 5 6 8

第二天按照新的排列继续操作。

现在小苞想知道:

  1. 所有苹果全部被拿走需要多少天;
  2. 编号为 x 的苹果在哪一天被拿走。

输入格式

输入一行两个整数:

n x

其中:

  • n 表示苹果总数;
  • x 表示需要查询的苹果编号。

数据范围:

1 ≤ x ≤ n ≤ 10000

输出格式

输出一行两个整数:

总天数 被查询苹果被拿走的天数

分别表示:

  1. 所有苹果全部被拿走需要的天数;
  2. 编号为 x 的苹果第几天被拿走。

两个数字之间用一个空格隔开。


样例

输入

8 8

样例解释

初始:

1 2 3 4 5 6 7 8

第一天

拿走第:

1 4 7

个苹果:

1 4 7

剩余:

2 3 5 6 8

第二天

当前队列:

2 3 5 6 8

拿走第:

1 4

个苹果:

对应编号:

2 6

剩余:

3 5 8

第三天

当前:

3 5 8

拿走:

3 8

剩余:

5

此时:

编号为 8 的苹果被拿走。

所以:

  • 总共还需要第4天拿完最后一个苹果;
  • 苹果8在第3天被拿走。

输出

5 5

数据范围说明

为了保证程序能够通过:

1 ≤ n ≤ 10000

可以直接模拟每天苹果变化过程。


解题提示

本题属于状态模拟问题

可以使用两个数组:

a数组:保存当前苹果排列

b数组:保存下一天苹果排列

每天:

  1. 遍历 a
  2. 判断当前位置是否需要删除;
  3. 删除的苹果丢弃;
  4. 未删除的苹果加入 b
  5. b 作为下一天的状态。

注意:

苹果的编号不会改变。

例如:

当前:

2 3 5 6 8

表示:

  • 第1个位置是2号苹果;
  • 第2个位置是3号苹果;
  • 第3个位置是5号苹果;
  • 第4个位置是6号苹果;
  • 第5个位置是8号苹果。

下一次删除的是位置,不是编号。


样例2

输入

5 5

过程:

第一天:

1 2 3 4 5

删除:

1 3 5

剩余:

2 4

第二天:

删除:

2

剩:

4

第三天:

删除:

4

所以:

  • 总天数:3
  • 苹果5:第1天被拿走

输出:

4 4

相关

在以下作业中:

递推