結果
問題 | No.323 yuki国 |
ユーザー |
![]() |
提出日時 | 2016-05-19 01:36:35 |
言語 | C#(csc) (csc 3.9.0) |
結果 |
TLE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 4,091 bytes |
コンパイル時間 | 1,885 ms |
コンパイル使用メモリ | 116,424 KB |
実行使用メモリ | 159,732 KB |
最終ジャッジ日時 | 2024-06-28 12:34:14 |
合計ジャッジ時間 | 46,022 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 6 |
other | AC * 28 TLE * 4 |
コンパイルメッセージ
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.Text;using System.Linq;class Program{public void Proc(){Reader.IsDebug = false;int[] inpt = Reader.ReadLine().Split(' ').Select(a=>int.Parse(a)).ToArray();this.Map = new Dictionary<int, int>[inpt[0], inpt[1]];this.Src = new char[inpt[0], inpt[1]];inpt = Reader.ReadLine().Split(' ').Select(a=>int.Parse(a)).ToArray();int defaultSize = inpt[0];int startY = inpt[1];int startX = inpt[2];inpt = Reader.ReadLine().Split(' ').Select(a=>int.Parse(a)).ToArray();int goalSize = inpt[0];int goalY = inpt[1];int goalX = inpt[2];int yukiCount = 0;int jimenCount = 0;for(int i=0; i<this.Map.GetLength(0); i++) {string str = Reader.ReadLine();for(int j=0; j<str.Length; j++) {if(str[j] == '*') {yukiCount++;} else{jimenCount++;}this.Src[i,j] = str[j];}}TaskItem firstTask = new TaskItem(startX, startY, defaultSize);Queue<TaskItem> taskQ = new Queue<TaskItem>();taskQ.Enqueue(firstTask);while (taskQ.Count > 0){TaskItem tsk = taskQ.Dequeue();int size = tsk.Size;if(this.Map[tsk.Y, tsk.X] != null && this.Map[tsk.Y, tsk.X].ContainsKey(tsk.Size)) {continue;}if(this.Map[tsk.Y, tsk.X] == null) {this.Map[tsk.Y, tsk.X] = new Dictionary<int, int>();}this.Map[tsk.Y, tsk.X].Add(size, 1);if(tsk.Y == goalY && tsk.X == goalX && size == goalSize) {break;}int[][] next = new int[4][];next[0] = new int[]{tsk.Y - 1, tsk.X};next[1] = new int[]{tsk.Y + 1, tsk.X};next[2] = new int[]{tsk.Y, tsk.X + 1};next[3] = new int[]{tsk.Y, tsk.X - 1};for(int i=0; i<next.Length; i++) {int nextY = next[i][0];int nextX = next[i][1];if(nextY < 0 || nextY >= this.Map.GetLength(0) || nextX < 0 || nextX >= this.Map.GetLength(1)) {continue;}int newVal = (this.Src[nextY, nextX] == '*'?size+1:size-1);if(newVal <= 0) {continue;}if(newVal > this.Map.GetLength(0) * this.Map.GetLength(1) + Math.Max(goalSize, defaultSize)) {continue;}TaskItem newT = new TaskItem(nextX, nextY, newVal);taskQ.Enqueue(newT);}}string ans = "No";if(this.Map[goalY, goalX] != null && this.Map[goalY, goalX].ContainsKey(goalSize)) {ans = "Yes";}Console.WriteLine(ans);}private Dictionary<int, int>[,] Map;private char[,] Src;private class TaskItem {public int X;public int Y;public int Size;public TaskItem(int x, int y, int size) {this.X = x;this.Y = y;this.Size = size;}}public class Reader{public static bool IsDebug = true;private static String PlainInput = @"1 21000 0 01 0 1..";private static System.IO.StringReader Sr = null;public static string ReadLine(){if (IsDebug){if (Sr == null){Sr = new System.IO.StringReader(PlainInput.Trim());}return Sr.ReadLine();}else{return Console.ReadLine();}}}static void Main(){Program prg = new Program();prg.Proc();}}