NC16596. [NOIP2011]计算系数
描述
输入描述
共一行,包含5个整数,分别为a,b,k,n,m,每两个整数之间用一个空格隔开。
输出描述
输出共1行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007取模后的结果。
示例1
输入:
1 1 3 1 2
输出:
3
C 解法, 执行用时: 6ms, 内存消耗: 4232K, 提交时间: 2022-09-24 11:00:24
#include<stdio.h> #define p 10007 int c[1001][1001]; int main(){ int a,b,k,n,m; scanf("%d%d%d%d%d",&a,&b,&k,&n,&m); a%=p;b%=p; c[1][0]=b;c[1][1]=a; for(int i=2;i<=k;i++){ for(int j=0;j<=i&&j<=n;j++){ c[i][j]=c[i-1][j]*b%p; if(j>0) c[i][j]=(c[i][j]+c[i-1][j-1]*a)%p; } } printf("%d\n",c[k][n]); }
C++ 解法, 执行用时: 11ms, 内存消耗: 8204K, 提交时间: 2021-10-22 22:50:47
#include<bits/stdc++.h> using namespace std; long long a,b,k,n,m,f[1005][1005]; int main(){ cin>>a>>b>>k>>n>>m; f[1][0]=b; f[1][1]=a; for(int i=2;i<=k;i++) for(int j=0;j<=k;j++) f[i][j]=(f[i-1][j]*b+f[i-1][j-1]*a)%10007; cout<<f[k][n]; }
Python3(3.5.2) 解法, 执行用时: 34ms, 内存消耗: 3480K, 提交时间: 2019-11-03 15:14:34
a,b,k,n,m=map(int,input().split(' ')) ans=pow(a,n,10007)*pow(b,m,10007) n=min(n,m) m=1 for i in range(0,n): ans=(ans*(k-i))//(i+1) print(ans%10007)
pypy3 解法, 执行用时: 129ms, 内存消耗: 25948K, 提交时间: 2022-03-28 18:26:36
a,b,k,n,m=map(int,input().split()) import math print(0 if n+m!=k else (((math.factorial(k)//math.factorial(n))//math.factorial(k-n))*a**n*b**m)%10007)