提出 #4360357


ソースコード 拡げる

#include <bits/stdc++.h>

using namespace std;

#define REP(i,n) for((i)=0;(i)<(int)(n);(i)++)

using ll = long long;

ll ps[51];
ll hs[51];

ll h(int n) {
  if (n == 0) return (hs[0] = 1);
  return (hs[n] = (2 * h(n - 1) + 1) + 2);
}

ll p(int n) {
  if (n == 0) return (ps[0] = 1);
  return (ps[n] = (2 * p(n - 1) + 1));
}

void init() {
  h(50);
  p(50);
}

ll calc(int n, ll k) {
  if (n == 0) {
    if (k == 1) return 1;
    return 0;
  }
  if (hs[n] <= k) return ps[n];

  ll s = hs[n-1];
  if (k <= s + 1) {
    return calc(n - 1, k - 1);
  } else if (k == s + 2) {
    return ps[n-1] + 1;
  } else if (s + 2 < k) {
    return ps[n-1] + 1 + calc(n - 1, k - s - 2);
  } else {
    cout << k << ' ' << s << endl;
    assert(false); // bug?
  }
}

int main() {
  int N;
  ll K;

  init();
  cin >> N >> K;
  cout << calc(N,K) << endl;

  return 0;
}

提出情報

提出日時
問題 D - Christmas
ユーザ jyane
言語 C++14 (GCC 5.4.1)
得点 400
コード長 910 Byte
結果 AC
実行時間 1 ms
メモリ 256 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 400 / 400
結果
AC × 3
AC × 16
セット名 テストケース
Sample a01, a02, a03
All a01, a02, a03, b04, b05, b06, b07, b08, b09, b10, b11, b12, b13, b14, b15, b16
ケース名 結果 実行時間 メモリ
a01 AC 1 ms 256 KiB
a02 AC 1 ms 256 KiB
a03 AC 1 ms 256 KiB
b04 AC 1 ms 256 KiB
b05 AC 1 ms 256 KiB
b06 AC 1 ms 256 KiB
b07 AC 1 ms 256 KiB
b08 AC 1 ms 256 KiB
b09 AC 1 ms 256 KiB
b10 AC 1 ms 256 KiB
b11 AC 1 ms 256 KiB
b12 AC 1 ms 256 KiB
b13 AC 1 ms 256 KiB
b14 AC 1 ms 256 KiB
b15 AC 1 ms 256 KiB
b16 AC 1 ms 256 KiB