#iroha2019day4d. [iroha2019_day4_d]揺れる街、増える敵
[iroha2019_day4_d]揺れる街、増える敵
ストーリー
「いったい、なんだったんでしょうか…」帰り道、いろはちゃんがぽつぽつと話し始める。 「さっきの化け物、明らかにおかしいです」「あんなの、この世界にいていいものじゃありません」「あれはまるで、バグ…」
彼女の言葉を遮るように、轟音が響き渡った。しかも、今度は何回も。僕たちは顔を見合わせ、走り出した。
問題文
\(T\) 個の街で、それぞれ敵が出現した。
\(i\) 番目の街で出現した敵は、一列に並んだマス状の形をしており、元々のマスの個数は \(1\) 個以上 \(L_i\) 個以下である。 街ではすでに敵のマスのうち \(0\) 個以上を破壊し、敵は破壊されたマスで分割されたいくつかの部分に分かれている。マスの個数が \(L\) の敵は、端から \(i\) 番目のマスを破壊されると、マスの個数がそれぞれ \(i-1\) と \(L-i\) の \(2\) つの敵に分割される(ただし、マスの個数が \(0\) の敵は消滅する)。
しかし、その敵は分割されると強くなってしまうものだった。具体的には、マスの個数が \(p_1, p_2, \dots, p_n\) である \(n\) 個の部分に分割されたとき、敵の強さは全体で \(p_1\times p_2\times\dots\times p_n\) になってしまう。
現在、\(i\) 番目の街では敵の強さが \(2^{A_i}\) 以上になってしまったという。敵の元々のマスの個数としてありうるものが何通りあるかを、\(T\) 個の街に現れた敵それぞれについて求めよ。
制約
- 入力はすべて整数
- \(1≦T≦300\)
- \(1≦L_i≦10^9,\ 0≦A_i≦10^9\)
入力
入力は以下の形式で与えられる。
\\(T\\)
\\(L_1\\) \\(A_1\\)
\\(L_2\\) \\(A_2\\)
:
\\(L_T\\) \\(A_T\\)
出力
\(T\) 行出力し、\(i\ (1≦i≦T)\) 行目には \(i\) 番目の街に出現した敵に対する答えを出力せよ。
入力例
4
9 3
13 4
11 6
11235813 213455
出力例
3
5
0
10702177
\(1\) 番目の街に出現した敵の元々のマスの個数は \(7, 8, 9\) の \(3\) 通りがあり得る。
それぞれ、敵が次のように破壊されたの場合に条件を満たす(o
はマスが破壊されていないことを、x
は破壊されていることを表す)。
- 敵の元々のマスの個数が \(7\) :
ooxoooo
(敵の強さは \(8\)) - 敵の元々のマスの個数が \(8\) :
ooxooxoo
(敵の強さは \(8\)) - 敵の元々のマスの個数が \(9\) :
oooxoxooo
(敵の強さは \(9\))
\(2\) 番目の街に出現した敵の元々のマスの個数は \(9, 10, 11, 12, 13\) の \(5\) 通りがあり得る。
それぞれ、次のような破壊のされ方の場合に条件を満たす。
- 敵の元々のマスの個数が \(9\) :
ooooxoooo
(敵の強さは \(16\)) - 敵の元々のマスの個数が \(10\) :
ooxooxoooo
(敵の強さは \(16\)) - 敵の元々のマスの個数が \(11\) :
oooxooooxoo
(敵の強さは \(24\)) - 敵の元々のマスの個数が \(12\) :
oooooooooxoo
(敵の強さは \(18\)) - 敵の元々のマスの個数が \(13\) :
ooooxoooooooo
(敵の強さは \(32\))
\(3\) 番目の街に出現した敵の元々のマスの個数は \(0\) 通りがあり得る。