結果
| 問題 |
No.3 ビットすごろく
|
| コンテスト | |
| ユーザー |
hotpepsi
|
| 提出日時 | 2014-12-23 22:50:36 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 1,749 ms / 5,000 ms |
| コード長 | 1,063 bytes |
| コンパイル時間 | 695 ms |
| コンパイル使用メモリ | 69,488 KB |
| 実行使用メモリ | 55,428 KB |
| 最終ジャッジ日時 | 2024-07-01 07:11:23 |
| 合計ジャッジ時間 | 15,272 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 33 |
ソースコード
#include <iostream>
#include <algorithm>
#include <sstream>
#include <vector>
#include <queue>
using namespace std;
//typedef deque<int> Queue;
typedef vector<int> Queue;
static inline int popcount(unsigned int b)
{
#ifdef __GNUC__
return __builtin_popcount(b);
#elif _MSC_VER >= 1400
return __popcnt(b);
#else
b = (b & 0x55555555) + (b >> 1 & 0x55555555);
b = (b & 0x33333333) + (b >> 2 & 0x33333333);
b = (b & 0x0F0F0F0F) + (b >> 4 & 0x0F0F0F0F);
b += b >> 8;
b += b >> 16;
return b & 0x3F;
#endif
}
int main(int argc, char *argv[])
{
string s;
getline(cin, s);
int N = atoi(s.c_str());
int v[10001] = {};
Queue q;
q.push_back(1);
int ans = 0;
while (q.size() > 0) {
++ans;
Queue next;
for (int i = 0; i < q.size(); ++i) {
int a = q[i];
int b = popcount(a);
if (a == N) {
cout << ans << endl;
return 0;
}
v[a] = 1;
if (a - b >= 1 && !v[a - b]) {
next.push_back(a - b);
}
if (a + b <= N && !v[a + b]) {
next.push_back(a + b);
}
}
q = next;
}
ans = -1;
cout << ans << endl;
return 0;
}
hotpepsi