結果
| 問題 |
No.3 ビットすごろく
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-11-17 00:42:37 |
| 言語 | C#(csc) (csc 3.9.0) |
| 結果 |
AC
|
| 実行時間 | 29 ms / 5,000 ms |
| コード長 | 1,617 bytes |
| コンパイル時間 | 1,378 ms |
| コンパイル使用メモリ | 108,332 KB |
| 実行使用メモリ | 25,880 KB |
| 最終ジャッジ日時 | 2024-07-01 08:50:02 |
| 合計ジャッジ時間 | 2,589 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 33 |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System;
using System.Collections.Generic;
namespace yuki0003 {
internal static class Program {
internal static int CountHighBits(int value) {
return value == 0 ? 0 : ( value % 2 + CountHighBits( value >> 1 ) );
}
public static int Solve(System.IO.TextReader reader) {
var n = int.Parse( reader.ReadLine() );
var cost = new int[ n ];
var stack = new Stack<int>();
var answer = -1;
const int FIRST = 1;
stack.Push( FIRST );
cost[ FIRST - 1 ] = 1;
int cur, backward, forward;
while (stack.Count > 0) {
cur = stack.Pop();
if (cur == n) {
if (answer == -1 || answer > cost[ cur - 1 ])
answer = cost[ cur - 1 ];
}
backward = cur - CountHighBits( cur );
if (backward >= 1 && ( cost[ backward - 1 ] == 0 || cost[ backward - 1 ] > cost[ cur - 1 ] + 1 )) {
stack.Push( backward );
cost[ backward - 1 ] = cost[ cur - 1 ] + 1;
}
forward = cur + CountHighBits( cur );
if (forward <= n && ( cost[ forward - 1 ] == 0 || cost[ forward - 1 ] > cost[ cur - 1 ] + 1 )) {
stack.Push( forward );
cost[ forward - 1 ] = cost[ cur - 1 ] + 1;
}
}
return answer;
}
static void Main(string[] args) {
Console.WriteLine( Solve( System.Console.In ) );
}
}
}