#6815. 小苹果PLUS
小苹果PLUS
小苹果PLUS
你是我的小丫,小苹果,哎哟喂,学的这么好一定是NOI金牌吧
题目描述
小 Y 的桌子上放着 n 个苹果,从左到右排成一列。
每个苹果都有一个唯一编号:
1 2 3 ... n
小苞每天都会按照固定规则拿走一些苹果。
每天操作如下:
- 从当前苹果队列的最左侧开始;
- 从第 1 个苹果开始,每隔 2 个苹果拿走 1 个苹果;
- 被拿走的苹果会从队列中消失;
- 剩余苹果保持原来的相对顺序,重新排列成一列;
- 第二天继续执行相同操作。
例如:
当前苹果:
1 2 3 4 5 6 7 8
第 1 天拿走:
1 4 7
剩余:
2 3 5 6 8
第二天按照新的排列继续操作。
现在小苞想知道:
- 所有苹果全部被拿走需要多少天;
- 编号为
x的苹果在哪一天被拿走。
输入格式
输入一行两个整数:
n x
其中:
n表示苹果总数;x表示需要查询的苹果编号。
数据范围:
1 ≤ x ≤ n ≤ 10000
输出格式
输出一行两个整数:
总天数 被查询苹果被拿走的天数
分别表示:
- 所有苹果全部被拿走需要的天数;
- 编号为
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数组:保存下一天苹果排列
每天:
- 遍历
a; - 判断当前位置是否需要删除;
- 删除的苹果丢弃;
- 未删除的苹果加入
b; - 将
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
相关
在以下作业中: