結果
| 問題 |
No.3 ビットすごろく
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2019-06-30 17:25:25 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 900 bytes |
| コンパイル時間 | 567 ms |
| コンパイル使用メモリ | 66,596 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-07-01 09:23:58 |
| 合計ジャッジ時間 | 1,565 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 33 |
ソースコード
/*
* 003_sample.cpp
*
* No.3 rbg낭
* Փx2
*/
#include <iostream>
#include <queue>
#include <vector>
using int64 = long long;
static const int INF = 1e9+7;
int bitCounter(int x) {
auto count = 0;
while (x > 0) {
if (x%2 == 1) {
count++;
}
x /= 2;
}
return count;
}
int main () {
int n = 0;
std::cin >> n;
int x[10010] = {};
std::queue<int> que;
que.push(1);
std::vector<int> vec(n+1, INF);
vec[1] = 1;
while (!que.empty()) {
auto now = que.front();
que.pop();
auto bit = bitCounter(now);
if (now - bit > 0 && vec[now - bit] == INF) {
vec[now - bit] = vec[now] + 1;
que.emplace(now - bit);
}
if (now + bit <= n && vec[now + bit] == INF) {
vec[now + bit] = vec[now] + 1;
que.emplace(now + bit);
}
}
std::cout << (vec[n] < INF ? vec[n] : -1) << std::endl;
return 0;
}