SRM485 Div2 500

問題

ある等差数列がある.しかし,偶数が嫌いな人がいるので,全部奇数になるように直してある数列が与えられる.
そこから元の等差数列を見つけて返す.

考え方

最初のa[0]とa[1]が決まれば他のa[i]は自動的に決定できる.
なので,このa[0]とa[1]についてループをまわして,残りはa[i]*2^kがa[i-1]と等差にすることができるかどうかチェックする.
2の累乗かどうかは(a&(a-1))が0かどうかで判定できるので高速.

反省

aとbとdを与えてbを2倍していったのをb'とすると「b' - a = d」となるb'を返す関数でボンミスしてた.
ちゃんと関数はユニットテストしましょう...