CodeChef is a non-commercial competitive programming community
Login
Username (New User? Signup) Password (Forgot Password?)
Signup
Login or
Signup with
Connect
Note
  • Publicize your achievements on your Facebook Wall.
  • Challenge your friends or ask them for help.

Site Navigation

  • PRACTICE
    • Easy
    • Medium
    • Hard
    • Challenge
    • Peer
  • COMPETE
    • All Contests
    • June Long 2012
    • May Cook-Off
    • May Long 2012
  • DISCUSS
    • Forums
    • Blog
    • Wiki
    • Facebook
    • Twitter
  • COMMUNITY
    • CodeChef Meetups
    • Campus Chapters
    • Host your Contest
    • User Groups
    • CodeChef TechTalks
    • All Educational Initiatives
  • HELP
    • Frequently Asked Questions
    • FAQ for problem setters
    • Problem Setting
    • Tutorials
    • Long Contest Ranks
    • Short Contest Ranks
    • Event Calendar
  • ABOUT
    • About CodeChef
    • Team CodeChef
    • Press Room
    • CodeChef Financials
    • CodeChef Sponsorships
    • CEO's Corner
    • Contact Us
    • About Directi
Home » Compete » September Long Contest » Haunted Maze

Haunted Maze

Problem code: HAUNTED

  • All Submissions

All submissions for this problem are available.

Chef is trapped in a haunted maze. There are ghosts that patrol the maze by following fixed paths. Chef is trying to escape the maze, but must avoid the ghosts or he will become frightened and faint. Additionally, Chef needs to escape within a certain amount of time, or he will faint from hunger. Your task is to determine if Chef can escape the maze without fainting, and if so the minimum time it will take.

You will be given the layout of the maze, including Chef's starting position, the position of the exit, and the patrol paths of the ghosts. There is a timer that keeps track of how long Chef has been in the maze. The timer starts at 0. Each second, the following happens (in order):

  • If the timer is equal to the maximum time Chef is allowed to spend in the maze, he will faint from hunger.
  • Chef may move to one of the adjacent cells of the maze (north, east, south, or west of his current position), provided that cell is neither a wall nor occupied by a ghost. Chef also has the option of standing still.
  • All of the ghosts move to the next cell in their repsective patrol paths. If any ghost moves into the cell now occupied by Chef, Chef will faint.
  • The timer is incremented by 1.
  • If Chef is now standing at the location of the exit, Chef successfully escapes the maze.

 

Ghost patrol paths will be given as a list of waypoints. Each waypoint will be in-line either horizontally or vertically with the next waypoint in the list, and the final waypoint will similarly be in-line with the first waypoint. Ghosts will move from waypoint to waypoint, one square at a time, using the shortest possible path. Once a ghost reaches its final waypoint, it will travel back to the first waypoint and repeat the cycle. For example, if a patrol path were given as the waypoints:
(2,3) (1,3) (1,0) (0,0) (0,1) (2,1)
Then the ghost's complete path would be:
(2,3) (1,3) (1,2) (1,1) (1,0) (0,0) (0,1) (1,1) (2,1) (2,2)
After which the sequence would repeat.

Input:

Input will begin with T, the number of test cases. Each test case begins with 4 integers: M, N, C, and K, where M is the height of the maze, N is the width of the maze, C is the number of ghosts, and K is the number of seconds before Chef will faint from hunger. C lines follow, each describing the patrol path of a ghost. Each patrol path begins with an integer L, the number of waypoints in the path, followed by L pairs of integers giving the (x,y) coordinates of a waypoint on the path, where (0,0) is the top-left corner and (N-1, M-1) is the bottom-right corner. Finally, M lines of N characters each describe the maze itself. A '.' character indicates a passable square, and a '#' character indicates an impassable wall (although the ghosts may pass through walls). A '@' character indicates the starting position of Chef (it is guaranteed that no ghost will begin here), and a '$' character indicates the exit of the maze (there will be exactly one '@' character and one '$' character in each test case).

Output:

For each test case, if Chef can escape without fainting, print the minimum number of seconds it will take him to escape. Otherwise, print -1.

Constraints:

T?10
1?M,N?30
0?C?30
0?K?100000
2?L?10

Sample Input:


4
10 10 0 200
##.$......
@#.######.
.#...#..#.
.###....#.
....###.#.
#.#.....#.
....#.###.
.####.#.#.
.#....#...
..........
3 10 1 18
2 1 1 7 1
###.######
@........$
######.###
5 5 2 13
2 2 4 2 1
3 4 2 3 2 2 2
##@##
##.##
$..##
#####
#####
2 2 1 1000
2 1 1 1 0
@$
..

Sample Output:

22
18
-1
-1


Author: pieguy
Date Added: 8-06-2011
Time Limit: 6 sec
Source Limit: 50000 Bytes
Languages: ADA, ASM, BASH, BF, C, C99 strict, CAML, CLOJ, CLPS, CPP 4.0.0-8, CPP 4.3.2, CS2, D, ERL, F#, FORT, GO, HASK, ICK, ICON, JAR, JAVA, JS, LISP clisp, LISP sbcl, LUA, NEM, NICE, PAS fpc, PAS gpc, PERL, PERL6, PHP, PIKE, PRLG, PYTH, PYTH 3.1.2, RUBY, SCALA, SCM guile, SCM qobi, ST, TCL, TEXT, WSPC


  • Submit

Comments

  • Login or Register to post a comment.

I think the author meant,

pr0ton @ 1 Sep 2011 06:30 PM
I think the author meant, faint and not feint.

I think you should re-check

lazzrov @ 2 Sep 2011 01:09 AM
I think you should re-check your test cases or maybe there is something that I'm missing. The last case has a solution but the output is -1. step #1 Ghost moves to 1,0 Chef stays on 0,0 step #2 Ghost moves to 1,1 Chef moves to 1,0 and exits the maze The needed time is 1000 for this case.

@lazzrov You are forgetting

shilp_adm @ 2 Sep 2011 02:03 AM
@lazzrov You are forgetting that there is an order in which these moves happen :-)

"Each patrol path begins with

rudradevbasak @ 2 Sep 2011 06:52 PM
"Each patrol path begins with an even integer L" The 3rd sample test's 2nd ghost has L=3.

@pr0ton: actually, Chef has a

david_adm @ 2 Sep 2011 10:00 PM
@pr0ton: actually, Chef has a nervous tick that makes him feint when very hungry or frightened, but please don't tease him about it. @rudradevbasak: ignore the word "even"; it was meant to be removed.

In second test case how is

rahul8iitkgp @ 3 Sep 2011 07:12 PM
In second test case how is point ( 7 1) is part of maze of size 3*10

Read the input specifications

xiaowuc1 @ 3 Sep 2011 10:53 PM
Read the input specifications more carefully; the input data are correct.

well if patrol path is (1,1)

rahul8iitkgp @ 3 Sep 2011 11:55 PM
well if patrol path is (1,1) (2,1) .....(7,1) then chef can stay at same position (1,0) for first move, when ghost is in (2,1) then he can go with straight path (1,0)(1,1)(1,2)..........(1,9) so answer here will be 10. is there something I am missing?

Read the problem statement

xiaowuc1 @ 4 Sep 2011 03:46 AM
Read the problem statement more carefully; the input data are correct.

@how be can say next way

satya_patel @ 4 Sep 2011 02:23 PM
@how be can say next way point is in vertical line or horizontal line???

@ admin :how be can say next

satya_patel @ 4 Sep 2011 02:24 PM
@ admin :how be can say next way point is in vertical line or horizontal line???

@ admin : Can two ghosts

thomas @ 4 Sep 2011 09:20 PM
@ admin : Can two ghosts share same location.

@admin Please re-explain the

ambujpandey @ 5 Sep 2011 12:25 AM
@admin Please re-explain the 4th test case. I have the same query as that of lazzrov. Does it mean that when the chef gets to the exit location he will need one more timer-increment to actually get out?

@ambujpandey the key thing is

lazzrov @ 5 Sep 2011 09:21 PM
@ambujpandey the key thing is "Each second, the following happens (in order):" So if he steps on the exit the ghost will step there after him the same second, so it's impossible to survive.

@ambujpandey No, but chef can

shilp_adm @ 5 Sep 2011 09:30 PM
@ambujpandey No, but chef can get out of the exit location at the *end* of the second. Carefully decoding the sequence of happenings in a second you should be able to get this sample. It is important to note that the Chef is moving before the Ghosts.

@admin : Please explain the

cprocoder @ 5 Sep 2011 10:44 PM
@admin : Please explain the second test case, chef can escape in 11 seconds by following straight path and stopping in the (6,2), and then continue following same path to end.

1. In a patrol, can the first

kurtbroad @ 5 Sep 2011 11:54 PM
1. In a patrol, can the first and the last points be the same?? 2. Can 2 consecutive way points be the same??

@shilp_adm and lazzrov. Oh...

ambujpandey @ 6 Sep 2011 07:51 AM
@shilp_adm and lazzrov. Oh... thanks a lot. Understood it now.

How can (N-1, M-1) can be the

vikram535 @ 6 Sep 2011 02:47 PM
How can (N-1, M-1) can be the bottom right corner. when (0,0) is the top left? Shouldnt it be (M-1, N-1) ? Somebody please explain..

Ignore the above

vikram535 @ 6 Sep 2011 05:15 PM
Ignore the above comment....Got it.

How about increasing PAS time

genyaz @ 6 Sep 2011 09:48 PM
How about increasing PAS time limit?

Can one of the ghost

shiti @ 7 Sep 2011 06:40 AM
Can one of the ghost initially be at chef's starting position? If so, does the chef die immediately (in the 0th second)?

@admin: the chef cannot move

codeprav @ 7 Sep 2011 03:07 PM
@admin: the chef cannot move to the cell now occupied by ghost and also to the cell which is to be occupied by ghost? make it clear

@shlti "A '@' character

shilp_adm @ 7 Sep 2011 04:26 PM
@shlti "A '@' character indicates the starting position of Chef (it is guaranteed that no ghost will begin here)" - problem statement

Hi admin, is it within the

dsun @ 8 Sep 2011 08:09 AM
Hi admin, is it within the rules of the contest to provide a larger test case for user to debug a TLE problem? Thanks.

Hey..my solution is working

vikram535 @ 11 Sep 2011 09:18 AM
Hey..my solution is working for even the biggest test cases...but it is showing wrong answer for some test case. In the constraints in the problem 1<= M,N <=30 , what if M and N both are 1. In this case how will we have "(there will be exactly one '@' character and one '$' character in each test case)" as mentioned in the problem?

SUCCESSFUL SUBMISSIONS FOR THIS PROBLEM:

Programming Competition Fetching successful submissions
Directi Go for Gold
CodeChef is a global programming communityCodeChef hosts online programming competitions
CodeChef is a non-commercial competitive programming community
  • About CodeChef
  • About Directi
  • CEO's Corner
  • C-Programming
  • Programming Languages
  • Contact Us
© 2009 Directi Group. All Rights Reserved. CodeChef uses SPOJ © by Sphere Research Labs
In order to report copyright violations of any kind, send in an email to copyright@codechef.com
CodeChef a product of Directi
The time now is:
CodeChef - A Platform for Aspiring Programmers

CodeChef was created as a platform to help programmers make it big in the world of algorithms, computer programming and programming contests. At CodeChef we work hard to revive the geek in you by hosting a programming contest at the start of the month and another smaller programming challenge in the middle of the month. We also aim to have training sessions and discussions related to algorithms, binary search, technicalities like array size and the likes. Apart from providing a platform for programming competitions, CodeChef also has various algorithm tutorials and forum discussions to help those who are new to the world of computer programming.

Practice Section - A Place to hone your 'Computer Programming Skills'

Try your hand at one of our many practice problems and submit your solution in a language of your choice. Our programming contest judge accepts solutions in over 35+ programming languages. Preparing for coding contests were never this much fun! Receive points, and move up through the CodeChef ranks. Use our practice section to better prepare yourself for the multiple programming challenges that take place through-out the month on CodeChef.

Compete - Monthly Programming Contests and Cook-offs

Here is where you can show off your computer programming skills. Take part in our 10 day long monthly coding contest and the shorter format Cook-off coding contest. Put yourself up for recognition and win great prizes. Our programming contests have prizes worth up to Rs.20,000 and $700lots more CodeChef goodies up for grabs.

Discuss

Are you new to computer programming? Do you need help with algorithms? Then be a part of CodeChef's Forums and interact with all our programmers - they love helping out other programmers and sharing their ideas. Have discussions around binary search, array size, branch-and-bound, Dijkstra's algorithm, Encryption algorithm and more by visiting the CodeChef Forums and Wiki section.

CodeChef Community

As part of our Educational initiative, we give institutes the opportunity to associate with CodeChef in the form of Campus Chapters. Hosting online programming competitions is not the only feature on CodeChef. You can also host a coding contest for your institute on CodeChef, organize an algorithm event and be a guest author on our blog.

Go For Gold

The Go for Gold Initiative was launched about a year after CodeChef was incepted, to help prepare Indian students for the ACM ICPC World Finals competition. In the run up to the ACM ICPC competition, the Go for Gold initiative uses CodeChef as a platform to train students for the ACM ICPC competition via multiple warm up contests. As an added incentive the Go for Gold initiative is also offering over Rs.8 lacs to the Indian team that beats the 29th position at the ACM ICPC world finals. Find out more about the Go for Gold and the ACM ICPC competition here.

Domain Name Registration, Web hosting, and Website Design provided by BigRock.com