結果
問題 | No.3 ビットすごろく |
ユーザー | evawenis |
提出日時 | 2020-06-23 20:38:29 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 3 ms / 5,000 ms |
コード長 | 659 bytes |
コンパイル時間 | 2,134 ms |
コンパイル使用メモリ | 199,844 KB |
最終ジャッジ日時 | 2025-01-11 09:39:33 |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 33 |
ソースコード
#include<bits/stdc++.h> using namespace std; struct pr{int nw,cost;}; int main(){ cin.tie(0),ios::sync_with_stdio(false); int n; cin>>n; vector<int>cnt(n+1,0); for(int i=1;i<=n;++i){ int j=i,sum=0; while(j){ sum+=j%2; j/=2; } cnt.at(i)=sum; } vector<int>mn(n+1,1e9); mn.at(1)=1; queue<pr>q; q.push({1,1}); while(q.size()){ int nw=q.front().nw,nxcost=q.front().cost+1; q.pop(); int mns=nw-cnt.at(nw),pls=nw+cnt.at(nw); if(mns>1&&nxcost<mn.at(mns)){ q.push({mns,nxcost}); mn.at(mns)=nxcost; } if(pls<=n&&nxcost<mn.at(pls)){ q.push({pls,nxcost}); mn.at(pls)=nxcost; } } cout<<(mn.at(n)!=1e9?mn.at(n):-1)<<"\n"s; }