結果
| 問題 |
No.3 ビットすごろく
|
| コンテスト | |
| ユーザー |
coco18000
|
| 提出日時 | 2019-12-11 23:36:37 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 3 ms / 5,000 ms |
| コード長 | 992 bytes |
| コンパイル時間 | 1,726 ms |
| コンパイル使用メモリ | 172,436 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-07-01 09:33:33 |
| 合計ジャッジ時間 | 2,900 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 33 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<ll, ll> pll;
#define FOR(i, n, m) for(ll (i)=(m);(i)<(n);++(i))
#define REP(i, n) FOR(i,n,0)
#define OF64 std::setprecision(10)
const ll MOD = 1000000007;
const ll INF = (ll) 1e15;
ll dp[100005];
ll bitnum(ll n) {
ll num = 0;
while (n > 0) {
num += (n & 1);
n >>= 1;
}
return num;
}
int main() {
ll N;
cin >> N;
REP(i, N + 1) {
dp[i] = INF;
}
dp[1] = 1;
queue<ll> q;
q.push(1);
while (!q.empty()) {
ll t = q.front();
q.pop();
ll n = bitnum(t);
if (t - n > 0 && dp[t - n] > dp[t] + 1) {
dp[t - n] = dp[t] + 1;
q.push(t - n);
}
if (t + n <= N && dp[t + n] > dp[t] + 1) {
dp[t + n] = dp[t] + 1;
q.push(t + n);
}
}
if (dp[N] == INF)
cout << -1 << endl;
else
cout << dp[N] << endl;
return 0;
}
coco18000