D - Bintree
Editorial
/
Time Limit: 5 sec / Memory Limit: 64 MB
Description
1つの数字が書かれた節点がn個ある.このn個の節点をすべて使って2分木を作る.2分木の定義については,例えば Wikipedia のページなどを参照すること.
木の重さを,その木に含まれる数字の和で定義する.木が空集合の場合,その重さは0であるとする.
次のことが成り立つとき,木は安定であると呼ぶ : 葉を除くすべての節点について左部分木と右部分木の重さの差の絶対値がa以上b以下となる.ここで,左の子を根とする部分木(左の子が存在しない場合は空集合)を左部分木と呼び,同様に右の子を根とする部分木を右部分木と呼ぶことにする.
n個の節点の値とa,bが与えられたとき,安定な2分木の個数を出力せよ.ただし,2分木の数を数える際は,n個の節点を全て区別する.また,子節点の順序が異なったり,節点の親子関係が異なる場合も区別して数える.
Input
入力は複数のテストケースからなる.入力の終わりは3つの0のみを含んだ行で示される.各テストケースは以下の形式で与えられる.
n a b x_1…x_n
- 1 ≦ n ≦ 13
- 0 ≦ a,b ≦ 2000
- 1 ≦ x_i ≦ 100
テストケースの1行目には3つの整数n,a,bが書かれている.
テストケースの2行目にはn個の整数x_iが書かれている.x_iはi番目の点に書かれている数字を表す.
テストケースの数は1つのファイルにつき20個以下であることが保証されている.
Output
各テストケースに対して,条件を満たす2分木の個数を1行で出力せよ.
Sample Input
1 0 100 1 2 3 3 1 2 3 0 2 1 2 3 10 0 10 1 2 3 4 5 6 7 8 9 10 13 0 10 1 2 3 4 5 6 7 8 9 10 11 12 13 0 0 0
Sample Output
1 0 6 164650496 213181735360