NC25236. 有趣的数字
描述
从前有个小哥哥Bill非常喜欢编程,但是让他更加心动的是班上那位小姐姐,为了取得小姐姐的欢心,Bill每天刷acm题,只想着找一个机会大发雄威。机会来了!有一天,老师为了提高同学们学习数学的积极性,做了一个小游戏:六位同学分为一组,每个同学心中想着自己最喜欢的数字a,b,c,e,f,g,对于(ax+by+cz)的k次方展开式中,(x^e)(y^f)(z^g)的系数是多少,当游戏开始时参与游戏的人需要在1秒内报出结果是多少。Bill一时兴奋忘了拿电脑,你能在下面帮助他赢得女神的欢心么?
输入描述
输入包含7个整数,分别为a ,b ,c, k ,e ,f, g每两个整数之间用一个空格隔开。(0≤k≤1,000, 0≤e,f,g≤k,且e+f+g=k ,0 ≤a,b,c ≤1000000)
输出描述
输出一行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007取模后的结果。
示例1
输入:
3 2 1 4 1 2 1
输出:
144
示例2
输入:
1 5 3 3 1 2 0
输出:
75
C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 488K, 提交时间: 2019-04-20 18:33:01
#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod=10007; ll ji[2000]; ll fpow(ll y,ll n){ ll ans=1; while(n){ if(n&1) ans=ans*y%mod; y=y*y%mod; n >>=1; } return ans; } int main(){ ll a,b,c,k,e,f,g; cin>>a>>b>>c>>k>>e>>f>>g; ji[0]=1; for(int i=1;i<=1000;i++){ ji[i]=ji[i-1]*i%mod; } cout<<ji[k]*fpow(ji[g],mod-2)%mod*fpow(ji[e],mod-2)%mod*fpow(ji[f],mod-2)%mod*fpow(a,e)%mod*fpow(b,f)%mod*fpow(c,g)%mod<<endl; }
C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 504K, 提交时间: 2020-02-26 13:21:28
#include<bits/stdc++.h> using namespace std; #define mod 10007 #define ll long long ll a,b,c,k,e,f,g; ll mul(ll x,ll y) { ll ans=1; ll a=x%mod; for(ll i=y;i;i>>=1) { if(i&1) ans=ans*a%mod; a=a*a%mod; } return ans%mod; } ll jie(ll x) { ll ans=1; for(ll i=1;i<=x;++i) { ans=ans*i%mod; } return ans%mod; } int main() { scanf("%lld%lld%lld%lld%lld%lld%lld",&a,&b,&c,&k,&e,&f,&g); printf("%d",jie(k)*(mul(jie(e)*jie(f)*jie(g)%mod,mod-2)%mod)%mod*mul(a,e)*mul(b,f)*mul(c,g)%mod); }
Python3(3.5.2) 解法, 执行用时: 31ms, 内存消耗: 3560K, 提交时间: 2019-04-20 21:46:20
import math a,b,c,k,e,f,g=map(int,input().split()) t1=math.factorial(e) t2=math.factorial(f) t3=math.factorial(g) ans=math.factorial(k) ans=ans//(t1*t2*t3) ans=ans*pow(a,e)*pow(b,f)*pow(c,g) print(ans%10007)