結果
| 問題 |
No.3 ビットすごろく
|
| コンテスト | |
| ユーザー |
airuai
|
| 提出日時 | 2016-09-14 14:11:09 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 919 bytes |
| コンパイル時間 | 575 ms |
| コンパイル使用メモリ | 65,156 KB |
| 実行使用メモリ | 6,824 KB |
| 最終ジャッジ日時 | 2024-11-17 05:56:15 |
| 合計ジャッジ時間 | 1,538 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 13 WA * 20 |
ソースコード
#include <iostream>
#include <queue>
using namespace std;
int BinaryCount(int a) {
/*int count = 0;
while (n > 0) {
count += n % 2;
n /= 2;
}
return count;*/
int cnt = 0;
while (a>0) {
cnt++;
a &= a - 1;
}
return cnt;
}
class Data {
public:
int p, kind;
Data(int p, int kind) {
this->p = p;
this->kind = kind;
}
};
int main(void) {
int n;
cin >> n;
bool* flag = new bool[n];
for (int i = 0; i < n; ++i) {
flag[i] = false;
}
int hosuu;
queue<Data> q;
Data d(1, 1);
q.push(d);
do {
d = q.front(); q.pop();
if (d.p == n) {
cout << d.kind << endl;
return 0;
}
flag[d.p - 1] = true;
hosuu = BinaryCount(d.p);
if (d.p - hosuu > 0 && !flag[d.p - 1 - hosuu]) {
d.p -= hosuu;
++d.kind;
q.push(d);
}
if (d.p + hosuu <= n && !flag[d.p - 1 + hosuu]) {
d.p += hosuu;
++d.kind;
q.push(d);
}
} while (!q.empty());
cout << "-1" << endl;
return 0;
}
airuai