結果

問題 No.3048 Swing
ユーザー tnakao0123
提出日時 2025-03-11 10:14:59
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 1 ms / 2,000 ms
コード長 861 bytes
コンパイル時間 276 ms
コンパイル使用メモリ 41,784 KB
実行使用メモリ 7,848 KB
最終ジャッジ日時 2025-06-20 02:27:25
合計ジャッジ時間 1,784 ms
ジャッジサーバーID
(参考情報)
judge4 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 62
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:23:8: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   23 |   scanf("%lld%lld", &x, &n);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~

ソースコード

diff #

/* -*- coding: utf-8 -*-
 *
 * 3048.cc:  No.3048 Swing - yukicoder
 */

#include<cstdio>
#include<algorithm>

using namespace std;

/* typedef */

using ll = long long;

/* subroutines */

inline ll sigma(ll n) { return n * (n + 1) / 2; }

/* main */

int main() {
  ll x, n;
  scanf("%lld%lld", &x, &n);

  ll m;
  if (x > 0) {
    ll m0 = 0, m1 = 2000000000;
    while (m0 + 1 < m1) {
      ll m = (m0 + m1) / 2;
      if (sigma(m) < x) m0 = m;
      else m1 = m;
    }

    m = min(n, m0);
    x -= sigma(m);
  }
  else {
    ll m0 = 0, m1 = 2000000000;
    while (m0 + 1 < m1) {
      ll m = (m0 + m1) / 2;
      if (sigma(m) <= -x) m0 = m;
      else m1 = m;
    }
    m = min(n, m1);
    x += sigma(m);
  }
  //printf(" x=%lld, m=%lld\n", x, m);

  ll d = (n - m) / 2;
  x += d;
  m += d * 2;
  if (m < n) x -= n;

  printf("%lld\n", x);
  
  return 0;
}
0