結果

問題 No.3 ビットすごろく
ユーザー asi1024asi1024
提出日時 2015-02-11 07:54:05
言語 C++11
(gcc 13.3.0)
結果
AC  
実行時間 2 ms / 5,000 ms
コード長 722 bytes
コンパイル時間 1,469 ms
コンパイル使用メモリ 162,640 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-07-01 07:12:47
合計ジャッジ時間 2,496 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 33
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>

#define REP(i,n) for(int i=0;i<(int)(n);i++)
#define ALL(x) (x).begin(),(x).end()

using namespace std;

const int INF = 1e9;

int d[16384];

int bitc(int n) {
  int res = 0;
  while (n > 0) {
    res += n % 2;
    n /= 2;
  }
  return res;
}

int main() {
  int n; cin >> n;
  REP(i,16384) d[i] = INF;
  d[1] = 1;
  queue<int> que;
  que.push(1);
  while (!que.empty()) {
    int v = que.front(); que.pop();
    int dv = bitc(v);
    if (v - dv >= 1 && d[v - dv] == INF) {
      d[v - dv] = d[v] + 1;
      que.push(v - dv);
    }
    if (v + dv <= n && d[v + dv] == INF) {
      d[v + dv] = d[v] + 1;
      que.push(v + dv);
    }
  }
  cout << (d[n] == INF ? -1 : d[n]) << endl;
  return 0;
}
0