提交时间:2024-08-20 13:35:08
运行 ID: 168746
#include <bits/stdc++.h> using namespace std; void jc(int n, int arr[]) { arr[0] = 1; arr[1] = 1; for (int i = 2; i <= n; ++i) { int carry = 0; for (int j = 1; j <= arr[0]; ++j) { int p = arr[j] * i + carry; arr[j] = p % 10; carry = p / 10; } while (carry) { arr[++arr[0]] = carry % 10; carry /= 10; } } } void di(int num[], int div, int tmp[]) { int r = 0; for (int i = num[0]; i > 0; --i) { int curr = r * 10 + num[i]; tmp[i] = curr / div; r = curr % div; } tmp[0] = num[0]; while (tmp[0] > 1 && tmp[tmp[0]] == 0) { tmp[0]--; } } int C(int m, int n) { int jcMPlusN[1045] = {0}; int jcM[1045] = {0}; int jcN[1045] = {0}; jc(m + n, jcMPlusN); jc(m, jcM); jc(n, jcN); int tmp[1045] = {0}; di(jcMPlusN, jcM[1] * jcN[1], tmp); int res = 0; for (int i = tmp[0]; i >= 1; --i) res = res * 10 + tmp[i]; return res; } int main() { int m, n; cin >> m >> n; cout << C(m-1, n-1) << endl; return 0; }