結果
問題 | No.3 ビットすごろく |
ユーザー |
|
提出日時 | 2016-10-26 22:09:16 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 5,000 ms |
コード長 | 1,489 bytes |
コンパイル時間 | 694 ms |
コンパイル使用メモリ | 90,372 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-01 08:08:03 |
合計ジャッジ時間 | 1,660 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 33 |
ソースコード
#include <vector>#include <map>#include <set>#include <stack>#include <queue>#include <algorithm>#include <utility>#include <functional>#include <sstream>#include <iostream>#include <cstdio>#include <cmath>#include <cstdlib>#include <cctype>#include <string>#include <cstring>#include <ctime>#include <climits>#include <fstream>using namespace std;inline int toInt(string s) { int v; istringstream sin(s); sin >> v; return v; }template<class T> inline string toStr(T x) { ostringstream sout; sout << x; return sout.str(); }typedef vector<int> vi;typedef vector<vi> vvi;typedef vector<string> vs;typedef pair<int, int> pii;typedef long long ll;#define ALL(a) (a).begin(),(a).end()#define RALL(a) (a).rbegin(),(a).rend()#define FOR(i,a,b) for(int i=(a);i<=(b);++i)#define REP(i,n) FOR(i,0,(n)-1)const double EPS = 1e-10;const double PI = acos(-1.0);const int INF = INT_MAX / 10;int bitnum(int n) {int res = 0;while (0 < n) {res += (n % 2);n /= 2;}return res;}int main() {int N;cin >> N;vi f(N+1, INF);f[1] = 1;int ans = -1;queue<int> Q;Q.push(1);while (!Q.empty()) {int p = Q.front();Q.pop();if (p == N) {ans = f[p];break;}int b = bitnum(p);int np1 = p + b;if (0 < np1 && np1 <= N && f[np1] == INF) {f[np1] = f[p] + 1;Q.push(np1);}int np2 = p - b;if (0 < np2 && np2 <= N && f[np2] == INF) {f[np2] = f[p] + 1;Q.push(np2);}}cout << ans << endl;return 0;}