思路
模拟,但是很明显 (TLE) ,一个数据都过不了。
我们发现这个小球掉落的次数有规律,而且跟奇偶有关。
第 (1) 次到 (1) 节点向左,第 (2) 次向右,第 (3) 次向左……
第 (1) 次到 (3) 节点向左,第 (2) 次向右,第 (3) 次向左……
那么我们开始找规律,初始为 (i)。
到达 (1) 节点,很显然,如果 (i) 是奇数,那么向左。
如果向左,那么怎么算出来 (i) 是第几次到达 (3) 节点的呢?
最终发现,(i) 是第 ((i + 1) / 2) 次到达该节点。以此类推,如果 ((i + 1) imes 2) 是奇数还需要向左。
如果是偶数,以此类推。不过是第 (i / 2) 次到达下一个节点。
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 20;
int d ,i ,n;
int main () {
scanf ("%d",&n);
for (int q = 1;q <= n;++ q) {
scanf ("%d%d",&d ,&i);
int k = 1;
for (int q = 0;d --;++ q) {
if (i & 1) {
k <<= 1; i = (i + 1) >> 1;
}
else {
k = k << 1 | 1; i >>= 1;
}
}
printf ("%d
",k / 2);
}
return 0;
}