結果
問題 |
No.3 ビットすごろく
|
ユーザー |
![]() |
提出日時 | 2019-10-17 16:17:43 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 3 ms / 5,000 ms |
コード長 | 717 bytes |
コンパイル時間 | 1,609 ms |
コンパイル使用メモリ | 172,220 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-01 09:32:09 |
合計ジャッジ時間 | 2,612 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 33 |
ソースコード
#include<bits/stdc++.h> #define REP(i,n) for(int i=0,i##_len=(n);i<i##_len;++i) #define rep(i,a,b) for(int i=int(a);i<int(b);++i) #define All(x) (x).begin(),(x).end() using namespace std; typedef long long ll; int main(){ const int inf=1e6; int N;cin>>N; queue<int> que; que.push(1); vector<int> d(N+1,inf); d[1]=1; while(!que.empty()){ int u=que.front();que.pop(); int f=__builtin_popcount(u); if(u-f>0&&d[u-f]>d[u]+1){ d[u-f]=d[u]+1; que.push(u-f); } if(u+f<N+1&&d[u+f]>d[u]+1){ d[u+f]=d[u]+1; if(u+f!=N) que.push(u+f); } } if(d[N]==inf) cout<<-1<<endl; else cout<<d[N]<<endl; }