提出 #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 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| 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 |