Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 359 Solved: 74
SubmitStatusWeb Board
Description
985走入了一个n * n的方格地图,他已经知道其中有一个格子是坏的。现在他要从(1, 1)走到(n, n),每次只可以向下或者向右走一步,问他能否到达(n,n)。若不能到达输出-1,反之输出到达(n,n)的方案数。
Input
第一行输入一个整数t,代表有t组测试数据。
每组数据第一行输入三个整数n,x,y,分别代表方格地图的大小以及坏掉格子的位置。
注:1 <= t <= 20,1 <= n <= 30,1 <= x,y <= n。
Output
若可以到达(n,n)则输出方案数对1e9 + 7取余的结果,反之输出-1。
Sample Input
2
2 1 2
2 2 2
2 1 2
2 2 2
Sample Output
1-1
如此水题,当时居然做不出来-----生无可恋.jpg
#include<cstdio>
#include<cstring>
#include<iostream>
#define maxn 1000000007
#include<algorithm>
using namespace std;
int main(){
int t, n, x, y;
cin >> t;
while(t--){
cin >> n >> x >> y;
long long map[50][50];
if((x == 1 && y == 1) || (x == n && y == n)){
cout << -1 << endl;
continue;
}
map[0][1] = 1;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
if(i == x && j == y){
map[i][j] = 0;
}
else{
map[i][j] = map[i-1][j] + map[i][j-1];
}
}
}
int ans = map[n][n] % maxn;
cout << ans << endl;
}
return 0;
}