結果
| 問題 | No.3 ビットすごろく |
| コンテスト | |
| ユーザー |
dnish
|
| 提出日時 | 2017-01-04 17:02:06 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 722 bytes |
| コンパイル時間 | 1,611 ms |
| コンパイル使用メモリ | 163,856 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-07-01 08:16:00 |
| 合計ジャッジ時間 | 2,639 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 33 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int bitcount(int n){
int i=0;
while(n>0){
if(n%2){
i++;
}
n/=2;
}
return i;
}
int main() {
int N,now,mv,go,back;
cin>>N;
queue<int> qu;
bool frag[N+1];
for(int i=1;i<=N;i++){
frag[i]=false;
}
int count[N+1];
qu.push(1);
count[1]=1;
frag[1]=true;
while(1){
now=qu.front();
qu.pop();
mv=bitcount(now);
go=now+mv;
back=now-mv;
if(go<=N && !frag[go]){
qu.push(go);
frag[go]=true;
count[go]=count[now]+1;
}
if(0<back && !frag[back]){
qu.push(back);
frag[back]=true;
count[back]=count[now]+1;
}
if(frag[N]){
cout<<count[N]<<endl;
break;
}else if(qu.empty()){
printf("-1\n");
break;
}
}
return 0;
}
dnish