ABC056: C - Go Home

問題

C: Go Home - AtCoder Beginner Contest 056 | AtCoder

解答

全てx+iを選択して進み、i = kのときに位置がはじめてX以上となるとする。 K = 1+2+...+k \ge Xである。K - X \lt kであるので、kより小さいある1以上の整数だけXを超過している。 和Kには、1からkまでの全ての整数を一度だけ用いているので、帳尻を合わせるために途中で1回留まることができる。

int main() {
  ll X; cin >> X;
  for (int i = 1; ; i++) {
    if (2 * X <= i * (i + 1)) {
      // auto K = i * (i + 1) / 2;
      // assert(K - X < i);
      std::cout << i << "\n";
      return 0;
    }
  }
  
  return 0;
}