競技プログラミング用 知識集積所

ABC420G - sqrt(n^2+n+X)

最終更新:

sport_programming

- view
管理者のみ編集可


問題


必要知識

B以下レベルの内容は省略
  • 特になし

考え方

nの値として、例えばXが10^14の場合、n=10^14-1までありうる。
よって、nの値で全探索※をするのは間に合わない。

根号を外した結果はだいたいnの値の±√Xくらいになると考えると、√(n^2+n+x) = n+k として考えるのがよいとわかる。
これを解いた n=(X-k*k)/(2*k-1) が整数かで考える。

この時点で、「まあ、10倍余裕を見て-10^8≦k≦10^8くらい全探索しとけばいいでしょ」でも通る。
が、以下真面目に調査が必要な探索範囲を考えてみる。

(x-k*k)/(2*k-1) が整数か ⇔ 4*(x-k*k)/(2*k-1) が整数か ⇔ (4*x-1)/(2*k-1) が整数か である。
そして、(4*x-1) = -(2*a-1)*(2*b-1) の場合、k=a と k=b で同じ値が出てくるので、|2*k-1| <= √|4*x-1| の範囲だけ考えればよい。
小数の扱いは怖いので、丸めを広い方にとって、それを探索範囲とすればよい。

解答例


注意点


別解

ウィキ募集バナー