結果

問題 No.3 ビットすごろく
ユーザー abinull
提出日時 2025-06-21 17:58:01
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
MLE  
実行時間 -
コード長 825 bytes
コンパイル時間 981 ms
コンパイル使用メモリ 84,176 KB
実行使用メモリ 754,588 KB
最終ジャッジ日時 2025-06-21 17:58:09
合計ジャッジ時間 8,108 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 3 MLE * 1 -- * 29
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <bitset>
#include <vector>
#include <queue>
#include <utility>

using namespace std;

int main() {

  int n;
  unsigned int t;
  
  cin >> n;

  vector<int> sg(n);
  vector<bool> v(n, false);

  for (int i=0; i<n; i++) {
    t = i+1;
    sg[i] = __popcount(t);
  }

  queue<int> q;

  int i, u, m, cnt;
  q.push(0);
  u = 0; i = 0; m = 0; cnt = 0;
  
  while (!q.empty()) {
    
      u = q.front(); q.pop();
      if (v[u]==false) {
        v[u] = true;
        cnt++;   
      }
      
      if (v[v.size()-1]==true) break;

    m = sg[u];

    for (i=(m%2==0 ? u : u+1); i<=u+m; i+=2) {
      if (i<0) continue;
      if (i>=v.size()) break;
      if (v[i]==true) continue;
      q.push(i);
    }
  } 

 if (u != sg.size()-1) {cout << -1 << endl;}
 else {cout << cnt << endl;}

  return 0;
}

0