取石子~高中公式题目

链接:https://www.nowcoder.com/acm/contest/113/A
来源:牛客网

题目描述

给出四堆石子,石子数分别为a,b,c,d。规定每次只能从堆顶取走石子,问取走所有石子的方案数。

输入描述:

在一行内读入四个由空格分隔的整数a,b,c,d, 输入均为不超过500的正整数

输出描述:

输出一个整数表示答案,答案对10
9
+7取模
示例1

输入

复制
3 5 4 2

输出

复制
2522520

备注:

输入均为不超过500的正整数

我已经是一个废了的大学生了

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <vector>
 5 using namespace std;
 6 
 7 const int maxn = 2e5 + 10;
 8 const int mod = 1e9 + 7;
 9 typedef long long LL;
10 
11 LL expmod(LL a, LL b) {
12     LL ret = 1;
13     while(b) {
14         if (b & 1) ret = ret * a % mod;
15         b = b >> 1;
16         a = a * a % mod;
17     }
18     return ret;
19 }
20 int main() {
21     int a, b, c, d, sum;
22     scanf("%d%d%d%d", &a, &b, &c, &d);
23     sum = a + b + c + d;
24     LL ans = 1;
25     for (int i = 1 ; i <= sum ; i++)
26         ans = ans * i % mod;
27     for (int i = 1 ; i <= a ; i++ )
28         ans = ans * expmod(i, mod - 2) % mod;
29     for (int i = 1 ; i <= b ; i++)
30         ans = ans * expmod(i, mod - 2) % mod;
31     for (int i = 1 ; i <= c ; i++)
32         ans = ans * expmod(i, mod - 2) % mod;
33     for (int i = 1 ; i <= d ; i++)
34         ans = ans * expmod(i, mod - 2) % mod;
35     printf("%lld
", ans);
36     return 0;
37 }


原文地址:https://www.cnblogs.com/qldabiaoge/p/9092116.html