## CCC '12 S5 - Mouse Journey

View as PDF

Points: 7
Time limit: 1.0s
Memory limit: 64M

Problem type
##### Canadian Computing Competition: 2012 Stage 1, Senior #5

You are a mouse that lives in a cage in a large laboratory. The laboratory is composed of one rectangular grid of square cages, with a total of rows and columns of cages ().

To get your exercise, the laboratory owners allow you to move between cages. You can move between cages either by moving right between two adjacent cages in the same row, or by moving down between two adjacent cages in the same column. You cannot move diagonally, left or up.

Your cage is in one corner of the laboratory, which has the label (to indicate top-most row, left-most column). You would like to visit your brother who lives in the cage labelled (bottom-most row, right-most column), which is in the other corner diagonally. However, there are some cages which you cannot pass through, since they contain cats.

Your brother, who loves numbers, would like to know how many different paths there are between your cage and his that do not pass through any cat cage. Write a program to compute this number of cat-free paths.

#### Input Specification

The first line of input contains two integers and , separated by one space representing the number of rows and columns (respectively). On the second line of input is the integer , the number of cages that contain cats. The next lines each contain the row and column positions (in that order) for a cage that contains a cat. None of the cat cages are repeated, and all cages are valid positions. Note also that and will not be cat cages.

#### Output Specification

Output the non-negative integer value representing the number of paths between your cage at position and your brother's cage at position . You can assume the output will be strictly less than .

#### Sample Input 1

2 3
1
2 1

#### Output for Sample Input 1

2

#### Sample Input 2

3 4
3
2 3
2 1
1 4

#### Output for Sample Input 2

1

• commented on Jan. 2, 2021, 3:57 a.m. edited

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

• commented on Jan. 18, 2021, 9:14 p.m.

Where is your combinatorics solution then?

• commented on Feb. 16, 2021, 1:12 p.m.

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

• commented on July 30, 2021, 10:07 a.m. edited

You would have to look at the number of ways to get to R,C, then subtract ways to get to catr, caty * ways to get from catr, catc to r,c. But if there are more cats, you would have to use PIE, which is very complicated.

• commented on Jan. 2, 2021, 11:45 p.m.

spittin' facts

• commented on July 5, 2020, 9:52 p.m.

Um, can someone help me? I'm getting TLE in case #5 and #7.

Thanks!

• commented on Jan. 3, 2022, 3:17 p.m.

Me too!

• commented on July 6, 2020, 1:49 a.m. edited

Join the DMOJ Slack for help.

• commented on Aug. 27, 2019, 5:26 p.m.

why am I getting WC in 3 cases?

• commented on Aug. 28, 2019, 12:41 a.m.

Be careful! Your code is checking negative array indices in one of its loops. Be aware that because of how C/C++ arrays work some odd things happen when you index element -1 in a 2-dimensional array:

#include <bits/stdc++.h>
using namespace std;

int main(){
int a[100][100] = {0};
a[0][99] = 1234;
cout << a[1][-1];
return 0;
}


You get 1234 as output because a[0][99] and a[1][-1] are technically accessing the same position in memory.

In summary, avoid negative index values. Make your array longer by 1 in both dimensions and adjust the variables in your loops.

• commented on Aug. 29, 2019, 7:30 a.m.

• commented on June 2, 2019, 12:06 p.m.

Classic DP problem.

• commented on Jan. 2, 2021, 4:10 a.m.

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

• commented on Feb. 12, 2021, 10:23 a.m.

i.e. a dp question

• commented on April 14, 2019, 12:15 p.m.

What if R,C=1,1?

• commented on Jan. 18, 2019, 7:24 a.m.

I submitted literally the exact same code onto wcipeg and got AC. Anyone know why this happened?

• commented on Jan. 18, 2019, 9:57 a.m.

You're checking if if (arr[i][j] != -1) but arr[i][j] might not be initialized and hence might equal -1, this migth work on wcipeg because the "random values" aren't , or because the compiler initialized the array to , or perhaps something entirely different the compiler pretty much has freedom to do whatever it wants if it gets undefined behaviour.

• commented on Jan. 22, 2019, 8:52 p.m.

got it now, thanks!