結果

問題 No.3 ビットすごろく
ユーザー twice_l
提出日時 2017-12-23 22:29:30
言語 C++11(廃止可能性あり)
(gcc 13.3.0)
結果
WA  
実行時間 -
コード長 930 bytes
コンパイル時間 955 ms
コンパイル使用メモリ 65,808 KB
実行使用メモリ 6,820 KB
最終ジャッジ日時 2024-12-17 16:51:15
合計ジャッジ時間 1,954 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 32 WA * 1
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <queue>

using namespace std;

int count_bit(int x);

int main()
{
  queue<int> a;
  int N;
  int now = 1;
  cin >> N;
  int step[N] = {0};
  step[0] = 1;

  while(1){
    if(now+count_bit(now) < N){
      if(step[now+count_bit(now)-1] == 0){
        step[now+count_bit(now)-1] = step[now-1]+1;
        a.push(now+count_bit(now));
      }
    }
    else if(now+count_bit(now) == N){
      cout << step[now-1]+1 << endl;
      return 0;
    }
    if(now-count_bit(now) > 0){
      if(step[now-count_bit(now)-1] == 0){
        step[now-count_bit(now)-1] = step[now-1]+1;
        a.push(now-count_bit(now));
      }
    }
    if(a.empty()){
      cout << -1 << endl;
      return 0;
    }
    now = a.front();
    a.pop();
  }
}

int count_bit(int x)
{
  int bits = 0;
  while(1){
    if(x%2 == 1) ++bits;
    x /= 2;
    if(x == 0) return(bits);
  }
}
0