結果
| 問題 | No.3 ビットすごろく |
| コンテスト | |
| ユーザー |
nak2yoshi
|
| 提出日時 | 2016-02-26 11:08:29 |
| 言語 | D (dmd 2.109.1) |
| 結果 |
AC
|
| 実行時間 | 343 ms / 5,000 ms |
| コード長 | 680 bytes |
| コンパイル時間 | 815 ms |
| コンパイル使用メモリ | 108,928 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-06-12 03:07:30 |
| 合計ジャッジ時間 | 4,582 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 33 |
ソースコード
import std.stdio,
std.conv,
std.string,
std.range,
std.math,
std.bigint,
std.algorithm,
core.bitop;
enum INF = int.max;
void main()
{
auto N = readln.strip.to!int;
auto dice = iota(N + 1).map!(e => popcnt(e)).array;
auto memo = new int[](N + 1);
memo[] = INF;
int solve(int i, int c)
{
if (i < 1 || i > N || memo[i] < c)
return INF;
if (i == N)
return c;
memo[i] = c;
auto f = solve(i + dice[i], c + 1);
auto b = solve(i - dice[i], c + 1);
return min(f, b);
}
auto ans = solve(1, 1);
(ans == INF ? -1 : ans).writeln;
}
nak2yoshi