結果
問題 | No.3 ビットすごろく |
ユーザー | Masahiro Hayashi |
提出日時 | 2015-05-31 18:48:25 |
言語 | C#(csc) (csc 3.9.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 2,649 bytes |
コンパイル時間 | 1,025 ms |
コンパイル使用メモリ | 114,316 KB |
実行使用メモリ | 28,180 KB |
最終ジャッジ日時 | 2024-07-06 13:04:59 |
合計ジャッジ時間 | 2,971 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 23 ms
26,028 KB |
testcase_01 | AC | 23 ms
23,748 KB |
testcase_02 | AC | 23 ms
24,004 KB |
testcase_03 | RE | - |
testcase_04 | RE | - |
testcase_05 | RE | - |
testcase_06 | RE | - |
testcase_07 | RE | - |
testcase_08 | RE | - |
testcase_09 | RE | - |
testcase_10 | RE | - |
testcase_11 | RE | - |
testcase_12 | RE | - |
testcase_13 | RE | - |
testcase_14 | RE | - |
testcase_15 | RE | - |
testcase_16 | RE | - |
testcase_17 | RE | - |
testcase_18 | RE | - |
testcase_19 | RE | - |
testcase_20 | RE | - |
testcase_21 | AC | 24 ms
28,180 KB |
testcase_22 | RE | - |
testcase_23 | RE | - |
testcase_24 | RE | - |
testcase_25 | RE | - |
testcase_26 | AC | 22 ms
23,980 KB |
testcase_27 | RE | - |
testcase_28 | RE | - |
testcase_29 | RE | - |
testcase_30 | RE | - |
testcase_31 | RE | - |
testcase_32 | RE | - |
コンパイルメッセージ
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; using System.Linq; using System.Text; namespace Application { class MainClass { public static void Main (string[] args) { new MainClass ().Calc (); } public MainClass () { } private class Pair { public readonly int Distance; public readonly int Item; public Pair (int n, int d) { this.Item = n; this.Distance = d; } } public void Calc () { var scan = new Scanner (); var N = scan.NextDigit (); var done = new Dictionary<int, int> (); var queue = new Queue<Pair> (); queue.Enqueue (new Pair (1, 1)); while (queue.Count > 0) { var x = queue.Dequeue (); if (x.Item == N) { Console.WriteLine (x.Distance); return; } done.Add (x.Item, 0); foreach (var y in this.neiboughrNodes(N, x.Item)) { if (!done.ContainsKey (y)) queue.Enqueue (new Pair (y, x.Distance + 1)); } } Console.WriteLine ("-1"); } List<int> neiboughrNodes (int N, int i) { var b1 = bit (i); var res = new List<int> (); if (i + b1 <= N) res.Add (i + b1); if (i - b1 > 1) res.Add (i - b1); return res; } int bit (int i) { var c = 0; while (i > 0) { if ((i & 1) > 0) c++; i = i >> 1; } return c; } void WriteLine (object o) { System.Console.WriteLine (o.ToString ()); } void WriteEnum<T> (IEnumerable<T> l) { WriteLine (JoinList (l)); } string JoinList<T> (IEnumerable<T> l) { return string.Join (" ", l.Select (x => x.ToString ()).ToArray ()); } } class Scanner { public int[] NextDigits (int count) { return Enumerable.Range (0, count) .Select (x => NextDigit ()).ToArray (); } public string NextToken () { int i; var r = new List<char> (); while ((i = System.Console.Read()) >= 0) { var c = Convert.ToChar (i); if (IsSpace (c) && r.Count > 0) break; r.Add (c); } return new string (r.ToArray ()); } bool IsSpace (char c) { if (char.IsWhiteSpace (c)) return true; return false; } public int NextDigit () { var token = NextToken (); return int.Parse (token); } } class Reader { public string Item () { return Items () [0]; } public String[] Items () { return this.Items (' '); } public String[] Items (char c) { return System.Console.ReadLine ().Split (c); } public int Int () { return Ints (' ') [0]; } public int[] Ints () { return this.Ints (' '); } public int[] Ints (char c) { return Items (c).Select (x => int.Parse (x)).ToArray (); } } }