結果
| 問題 | No.3 ビットすごろく |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-09-11 10:20:24 |
| 言語 | D (dmd 2.109.1) |
| 結果 |
AC
|
| 実行時間 | 2,269 ms / 5,000 ms |
| コード長 | 833 bytes |
| コンパイル時間 | 4,903 ms |
| コンパイル使用メモリ | 176,132 KB |
| 実行使用メモリ | 220,416 KB |
| 最終ジャッジ日時 | 2024-06-29 01:04:40 |
| 合計ジャッジ時間 | 23,389 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 33 |
ソースコード
module main;
import std;
import core.bitop;
void main()
{
// 入力
int N = readln.chomp.to!int;
// 答えの計算と出力
auto visited = new bool[](N + 1);
visited[1] = true;
// ターン数と今いるマスの組
alias P = Tuple!(int, int);
auto que = DList!P(P(1, 1));
while (!que.empty) {
P p = que.front;
que.removeFront;
int turn = p[0], now = p[1];
// ゴールにいるならばターン数を表示して終了
if (now == N) {
writeln(turn);
return;
}
visited[now] = true; // 訪問済みにする
// 移動する距離
int move = popcnt(now);
if (now + move <= N && !visited[now + move])
que.insertBack(P(turn + 1, now + move));
if (now - move > 0 && !visited[now - move])
que.insertBack(P(turn + 1, now - move));
}
// Nマス目に到達できなかった
writeln(-1);
}