結果
| 問題 | No.3 ビットすごろく | 
| コンテスト | |
| ユーザー |  smiken_61 | 
| 提出日時 | 2015-10-23 15:08:47 | 
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 3 ms / 5,000 ms | 
| コード長 | 882 bytes | 
| コンパイル時間 | 578 ms | 
| コンパイル使用メモリ | 67,784 KB | 
| 実行使用メモリ | 6,948 KB | 
| 最終ジャッジ日時 | 2024-07-01 07:34:40 | 
| 合計ジャッジ時間 | 1,571 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 33 | 
ソースコード
#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include <string>
#include <queue>
using namespace std;
int b(int a){
int k=0;
for(int y=0;y<15;y++){
if(a&1 == 1 ) k=k+1;
a=a >> 1;
}
return k;
}
int main() {
queue<pair<int,int> > q; //iti,kaisuu
int n;
int ch[100000]={0};
ch[1]=1;
pair<int,int> z;
cin>>n;
q.push(make_pair(1,1));
int ans=-1;
int kaisuu=-1,ichi;
while(q.size() != 0){
z=q.front();
 ichi=z.first;
kaisuu=z.second;
if(ichi==n) {
ans=kaisuu;
break;
}
if(0< ichi+b(ichi) && ichi+b(ichi) <n+1){
if(ch[ichi+b(ichi)]==0) {
q.push(make_pair(ichi+b(ichi),kaisuu+1));
ch[ichi+b(ichi)]=1;
}
//cout<<ichi+b(ichi)<<" "<<kaisuu+1<<endl;
}
if(0< ichi-b(ichi) && ichi-b(ichi) <n+1){
if(ch[ichi-b(ichi)]==0) {
q.push(make_pair(ichi-b(ichi),kaisuu+1));
ch[ichi-b(ichi)]=1;
}
//cout<<ichi-b(ichi)<<" "<<kaisuu+1<<endl;
}
q.pop();
}
cout<<ans<<endl;
return 0;
}
            
            
            
        