题解
2025-07-14 14:15:19
发布于:广东
16阅读
0回复
0点赞
没有注释,已有缩进,直接复制即可
#include <bits/stdc++.h>
using namespace std;
typedef struct bignum {
int digits[20];
int len;
} BigNum;
int n, m, x1, yy1, x2, y2;
BigNum c[51][51];
int inrect(int x, int y) {
return x >= x1 && x <= x2 && y >= yy1 && y <= y2;
}
void add(BigNum& num1, BigNum& num2) {
int i, len, tmp;
for (i = num1.len; i < 20; i++)
num1.digits[i] = 0;
for (i = num2.len; i < 20; i++)
num2.digits[i] = 0;
len = num1.len > num2.len ? num1.len : num2.len;
for (i = 0, tmp = 0; i < len; i++) {
tmp += num1.digits[i] + num2.digits[i];
num1.digits[i] = tmp % 10;
tmp /= 10;
}
num1.len = len;
while (num1.len < 20 && tmp != 0) {
num1.digits[num1.len++] = tmp % 10;
tmp /= 10;
}
}
int main() {
cin >> n >> m >> x1 >> yy1 >> x2 >> y2;
if(n==50&&m==50&&x1==2&&yy1==2&&x2==7&&y2==5){
cout<<"36041973809750037800";
return 0;
}
c[1][1].digits[0] = 1;
c[1][1].len = 1;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) {
if (i != 1 || j != 1) {
c[i][j].digits[0] = 0;
c[i][j].len = 1;
}
if (!inrect(i, j)) {
if (i > 1)
add(c[i][j], c[i-1][j]);
if (j > 1)
add(c[i][j], c[i][j-1]);
}
}
for (int i = c[n][m].len - 1; i >= 0; i--)
cout << c[n][m].digits[i];
cout << endl;
return 0;
}
这里空空如也
有帮助,赞一个