第一个题解
2024-10-20 19:06:27
发布于:广东
14阅读
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; }
全部评论 1
富之源强强强
2024-10-20 来自 广东
0
有帮助,赞一个