链接:https://www.nowcoder.com/acm/contest/113/A
来源:牛客网
题目描述
给出四堆石子,石子数分别为a,b,c,d。规定每次只能从堆顶取走石子,问取走所有石子的方案数。
输入描述:
在一行内读入四个由空格分隔的整数a,b,c,d, 输入均为不超过500的正整数
输出描述:
输出一个整数表示答案,答案对109
+7取模
备注:
输入均为不超过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 }