結果

問題 No.240 ナイト散歩
ユーザー eitaho
提出日時 2015-07-10 22:29:28
言語 C#
(csc 3.100.19.26603)
結果
AC  
実行時間 32 ms
コード長 2,909 Byte
コンパイル時間 1,248 ms
使用メモリ 9,936 KB
最終ジャッジ日時 2019-10-06 00:33:58

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
99_challenge01.txt AC 30 ms
9,924 KB
99_challenge02.txt AC 31 ms
9,924 KB
challenge01.txt AC 30 ms
9,924 KB
challenge02.txt AC 30 ms
9,924 KB
sample1.txt AC 30 ms
9,920 KB
sample2.txt AC 29 ms
9,916 KB
sample3.txt AC 32 ms
9,916 KB
sample4.txt AC 31 ms
9,932 KB
system_test1.txt AC 30 ms
9,916 KB
system_test2.txt AC 31 ms
9,920 KB
system_test3.txt AC 31 ms
9,916 KB
system_test4.txt AC 30 ms
9,920 KB
system_test5.txt AC 29 ms
9,924 KB
system_test6.txt AC 29 ms
9,924 KB
system_test7.txt AC 30 ms
9,924 KB
system_test8.txt AC 30 ms
9,936 KB
system_test9.txt AC 29 ms
9,920 KB
system_test10.txt AC 29 ms
9,928 KB
test1.txt AC 29 ms
9,916 KB
test2.txt AC 30 ms
9,920 KB
test3.txt AC 29 ms
9,920 KB
test4.txt AC 29 ms
9,924 KB
test5.txt AC 29 ms
9,928 KB
test6.txt AC 30 ms
9,924 KB
test7.txt AC 29 ms
9,924 KB
test8.txt AC 29 ms
9,932 KB
test9.txt AC 29 ms
9,916 KB
test10.txt AC 29 ms
9,920 KB
test11.txt AC 29 ms
9,924 KB
test12.txt AC 29 ms
9,920 KB
test13.txt AC 29 ms
9,924 KB
test14.txt AC 28 ms
9,920 KB
test15.txt AC 28 ms
9,924 KB
test16.txt AC 29 ms
9,920 KB
テストケース一括ダウンロード
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.100.19.26603 (9d80dea7)
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