Codeforces 578A. A Problem about Polyline

問題

(0,0)->(x,x)->(2x,0)->(3x,x)->・・・のようなぎざぎざした線を考える。
今、整数点(a,b)をこの直線が通る事がわかっている。
可能なxの中で最小のものを返す。なければ-1を返す。

1<=a,b<=10^9

考え方

まず、y軸の方は0からxまでしか変化し得ないので、b以上でなければならないので、x>=b。
x=bとすると、aがxで割り切れるならば、山なりの頂点になる。なので、x=bが答えになる。
そうでなければ、山と山の間に点が存在しうる。xを増やす方にしか変化しないので必ず、左側の山を下る線上に点が存在するはず。なので、点(a,b)を通るような45度で下るような線を考えれば良い。
45度で下るような線はy'=-x'+pなのでp=a+bとなって、y'=-x'+(a+b)。
そして、この線は{a/b+(a/b)%2}番目の線なので、(a+b)/(double){a/b+(a/b)%2}が答えになる。


また、答えがないケースとして、最初の山に上る線より左側、{a/b+(a/b)%2}==0であるような場合は答えがない。