結果
| 問題 | No.3 ビットすごろく |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-05-25 11:02:44 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 813 bytes |
| コンパイル時間 | 1,330 ms |
| コンパイル使用メモリ | 161,756 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-01 08:42:42 |
| 合計ジャッジ時間 | 2,549 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 33 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
static const int INF = 1e8;
bool flag[10001];
int cnt[10001];
int bitcnt(int num) {
int ans=0;
while(num>0) {
if(num%2==1) ans++;
num /= 2;
}
return ans;
}
int main() {
for (int i=0; i<10001; i++) {
flag[i] = false;
cnt[i] = INF;
}
cnt[1]=1;
int n;
cin >> n;
queue<int> q;
q.push(1);
while(!q.empty()) {
int now=q.front();
q.pop();
if (flag[now]) continue;
flag[now] = true;
int d=bitcnt(now);
if(1<=now-d&&now-d<=n&&flag[now-d]==false) {
cnt[now-d] = min(cnt[now]+1,cnt[now-d]);
q.push(now-d);
}
if(1<=now+d&&now+d<=n&&flag[now+d]==false) {
cnt[now+d] = min(cnt[now]+1,cnt[now+d]);
q.push(now+d);
}
}
printf("%d\n", (flag[n])?cnt[n]:-1);
return 0;
}