##### Canadian Computing Competition: 2020 Stage 1, Junior #5, Senior #2

You have to determine if it is possible to escape from a room. The room is an -by- grid with each position (cell) containing a positive integer. The rows are numbered and the columns are numbered . We use to refer to the cell in row and column .

You start in the top-left corner at and exit from the bottom-right corner at . If you are in a cell containing the value , then you can jump to any cell satisfying . For example, if you are in a cell containing a , you can jump to cell .

Note that from a cell containing a , there are up to four cells you can jump to: , or . If the room is a -by- grid, there isn't a row so only the first three jumps would be possible.

#### Input Specification

The first line of the input will be an integer . The second line of the input will be an integer . The remaining input gives the positive integers in the cells of the room with rows and columns. It consists of lines where each line contains positive integers, each less than or equal to , separated by single spaces.

For of the available marks, and .

For an additional of the available marks, .

For an additional of the available marks, all of the integers in the cells will be unique.

For an additional of the available marks, and .

#### Output Specification

Output `yes`

if it is possible to escape from the room. Otherwise, output `no`

.

#### Sample Input

```
3
4
3 10 8 14
1 11 12 12
6 2 3 9
```

#### Output for Sample Input

`yes`

#### Explanation of Output for Sample Input

Starting in the cell at which contains a , one possibility is to jump to the cell at . This cell contains an so from it, you could jump to the cell at . This brings you to a cell containing from which you can jump to the exit at . Note that another way to escape is to jump from the starting cell to the cell at to the cell at to the exit.

**Notes**

The online grader begins by testing submissions using the sample input. All other tests are skipped if the sample test is not passed. If you are only attempting the first three subtasks (the first marks), then you might want to handle the specific values of the sample input as a special case.

For the final subtask (worth marks), if you are using Java, then

`Scanner`

will probably take too long to read in the large amount of data. A much faster alternative is`BufferedReader`

.

## Comments

Wrote CCC Jr. this year, my first CCC, and I was relatively new to competitive programming before the contest. First 4 were pretty straight forward, and then this problem stumped me with 0.5 hours remaining. Here I am today, I have a solution using backtracking, but still get TLE (Java 11). Any suggestions on how to improve the algorithm (input reading isn't an issue)?

EDIT: I rewrote my program from recursive BFS search (which I thought was just backtracking) to dynamic BFS search using a while loop and got AC on the CCC Grader, but still TLE on the last 3 subtests on DMOJ. Any tips on how to get AC here?

Cool story. If you need any help, please ask on Slack instead of in the comments.

Oh, didn't know that, sorry :) Thank you for letting me know!!

I can only seem to get 10/15 on the grader. For the cases that are incorrect, my code outputs yes when it should be no. Pls halp

This comment is hidden due to too much negative feedback. Click here to view it.

Can someone look through my code, I keep getting TLE on the last batch.

I have used a BufferedReader, so I am not sure what the problem actually is!

Thank you very much!

Edit: Nvm I found the problem.

Someone help pls, what is wrong with my code?

EDIT: NEVERMIND

My code outputs "yes" when I run the sample input on my IDE but it WA's and prints "no" to the same sample input when I submit it. Any suggestions?

https://dmoj.ca/submission/2064841

EDIT: Solved. It was a simple variable error.

you so sorry bruh. C++ kids remember to memset our arrays on stack.

Is it even possible to solve this without TLE in Python 3? the fastest submission has an execution time of ~8 seconds

I feel like this should be a 10p, considering 2018 J5 - Choose your own path was a 7p this should be worth a bit more - along with implementing a graph searching algorithm you had to efficiently compute factors, and the actual implementation was more sophisticated then simply using a standard graph adjacency representation. A fair bit of TLEing too, from what I've seen and heard.

Well since knight hop is now 7 points, it would be fair for this to be worth 10 now. You might be able to get your wish.

Graph problems are quite uncommon and usually a bit more difficult to be CCC S2s, but this problem is also a J5. However, I do agree with you. (This in fact is the first graph theory S2).

I'm having trouble staying below the memory limit. Can someone give me a hint?

comment removed

how to not tle on batch 7?

Your getPairs function looks through 1 to N for every space added to the queue which is too slow. Try finding a faster way to look for factors.

My code gives a NameError on the first case? It woks fine on the CCC Grader.

Please read the tips page. In particular,

Can anyone explain why I am getting TLE at the end of Batch 6 even though I am just implementing BFS on my program (c++)

It is because your BFS function contains a

`searchm`

function which runs in every iteration, probably taking up to .TFW you spent 40 whole minutes during the CCC thinking you can only jump to adjacent cells.

Disregard this comment, I'm blind.

AC in CCC and TLE on DMOJ. (finally solved it)

Any tips on how to not TLE even with C++?

Having a loop to find all the factors of the number in the current cell is too slow. Try to find an approach that avoids this.

ok thanks

You could do it relatively fast if you just precompute the factors when you're taking input