結果

問題 No.240 ナイト散歩
ユーザー eitaho
提出日時 2015-07-10 22:29:28
言語 C#
(csc 3.4.0-beta4-19569-03)
結果
AC  
実行時間 28 ms
コード長 2,909 Byte
コンパイル時間 2,247 ms
使用メモリ 17,904 KB
最終ジャッジ日時 2020-02-19 10:42:39

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
99_challenge01.txt AC 28 ms
17,828 KB
99_challenge02.txt AC 28 ms
17,760 KB
challenge01.txt AC 27 ms
17,652 KB
challenge02.txt AC 27 ms
17,728 KB
sample1.txt AC 26 ms
17,772 KB
sample2.txt AC 26 ms
17,572 KB
sample3.txt AC 27 ms
17,576 KB
sample4.txt AC 27 ms
17,636 KB
system_test1.txt AC 26 ms
17,668 KB
system_test2.txt AC 26 ms
17,652 KB
system_test3.txt AC 27 ms
17,580 KB
system_test4.txt AC 27 ms
17,636 KB
system_test5.txt AC 25 ms
17,696 KB
system_test6.txt AC 28 ms
17,824 KB
system_test7.txt AC 28 ms
17,704 KB
system_test8.txt AC 26 ms
17,720 KB
system_test9.txt AC 26 ms
17,904 KB
system_test10.txt AC 26 ms
17,664 KB
test1.txt AC 26 ms
17,680 KB
test2.txt AC 25 ms
17,680 KB
test3.txt AC 26 ms
17,684 KB
test4.txt AC 26 ms
17,584 KB
test5.txt AC 26 ms
17,832 KB
test6.txt AC 25 ms
17,584 KB
test7.txt AC 25 ms
17,904 KB
test8.txt AC 26 ms
17,672 KB
test9.txt AC 26 ms
17,760 KB
test10.txt AC 26 ms
17,708 KB
test11.txt AC 26 ms
17,760 KB
test12.txt AC 27 ms
17,596 KB
test13.txt AC 28 ms
17,600 KB
test14.txt AC 27 ms
17,744 KB
test15.txt AC 27 ms
17,680 KB
test16.txt AC 28 ms
17,700 KB
テストケース一括ダウンロード
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.5.0-beta1-19606-04 (d2bd58c6)
Copyright (C) Microsoft Corporation. All rights reserved.

ソースコード

diff #
using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Collections.Generic;
using System.Diagnostics;
using System.Numerics;
using Enu = System.Linq.Enumerable;

class Program
{
    static readonly int MaxMoves = 3;
    static readonly int Offset = 100;
    static readonly int MaxSize = Offset * 2 + 1;
    bool[,] seen = new bool[MaxSize, MaxSize];

    public void Solve()
    {
        int X = Reader.Int(), Y = Reader.Int();
        DFS(Offset, Offset, 0);
        if (X + Offset >= 0 && Y + Offset >= 0 && 
            X + Offset < MaxSize && Y + Offset < MaxSize && 
            seen[X + Offset, Y + Offset]) Console.WriteLine("YES");
        else Console.WriteLine("NO");
    }

    private void DFS(int x, int y, int steps)
    {
        seen[x, y] = true;
        if (steps == MaxMoves) return;
        if (x < 0 || y < 0 || x >= MaxSize || y >= MaxSize) return;
        for (int dx = -2; dx <= 2; dx++)
            for (int dy = -2; dy <= 2; dy++)
                if (Math.Abs(dx) * Math.Abs(dy) == 2)
                {
                    int nx = x + dx, ny = y + dy;
                    DFS(nx, ny, steps + 1);
                }
    }
}



class Entry { static void Main() { new Program().Solve(); } }
class Reader
{
    private static TextReader reader = Console.In;
    private static readonly char[] separator = { ' ' };
    private static readonly StringSplitOptions op = StringSplitOptions.RemoveEmptyEntries;
    private static string[] A = new string[0];
    private static int i;
    private static void Init() { A = new string[0]; }
    public static void Set(TextReader r) { reader = r; Init(); }
    public static void Set(string file) { reader = new StreamReader(file); Init(); }
    public static bool HasNext() { return CheckNext(); }
    public static string String() { return Next(); }
    public static int Int() { return int.Parse(Next()); }
    public static long Long() { return long.Parse(Next()); }
    public static double Double() { return double.Parse(Next()); }
    public static int[] IntLine() { return Array.ConvertAll(Split(Line()), int.Parse); }
    public static int[] IntArray(int N) { return Enu.Range(0, N).Select(i => Int()).ToArray(); }
    public static int[][] IntTable(int H) { return Enu.Range(0, H).Select(i => IntLine()).ToArray(); }
    public static string[] StringArray(int N) { return Enu.Range(0, N).Select(i => Line()).ToArray(); }
    public static string Line() { return reader.ReadLine().Trim(); }
    private static string[] Split(string s) { return s.Split(separator, op); }
    private static string Next() { CheckNext(); return A[i++]; }
    private static bool CheckNext()
    {
        if (i < A.Length) return true;
        string line = reader.ReadLine();
        if (line == null) return false;
        if (line == "") return CheckNext();
        A = Split(line);
        i = 0;
        return true;
    }
}
0