//拆成了3部分 其实拆成2部分就可以...
#include <iostream>
using namespace std;
#define ll long long
const ll mod=1e5+3;
const ll maxn=1e3+1;
ll list[maxn];
ll revs[maxn];
inline ll ext_gcd(ll a,ll b,ll &x,ll &y)
{
if(b==0)
{
x=1;y=0;
return a;
}
ll r=ext_gcd(b,a%b,y,x);//x=y' y=x'-(a/b)*y' -> y=x' x=y'
y-=(a/b)*x;
return r;
}
ll res(ll a)
{
ll x,y;
ext_gcd(a,mod,x,y);
return x>0?x%mod:(x%mod+mod)%mod;
}
void init()
{
list[0]=1;
revs[0]=res(list[0]);
for(int i=1;i<maxn;i++)
{
list[i]=list[i-1]*i%mod;
revs[i]=res(list[i]);
}
}
ll getC(ll m,ll n)
{
return list[m]*revs[m-n]%mod*revs[n]%mod;
}
ll getA(ll m,ll n)
{
return list[m]*revs[m-n]%mod;
}
int main(int argc, char** argv) {
init();
int a,b,c,d,k;
cin>>a>>b>>c>>d>>k;
ll ans=0;
for(int i=0;i<=min(min(a,b),k);i++)
for(int j=0;j<=min(min(a-i,d),k);j++)
{
if(i+j>k)continue;
if(min(c,d-j)<(k-(i+j)))continue;
ans=ans+getC(a,i)*getA(b,i)%mod*getC(a-i,j)%mod*getA(d,j)%mod*getC(d-j,k-(i+j))%mod*getA(c,k-(i+j))%mod;
ans%=mod;
}
cout<<ans<<endl;
return 0;
}
P1350 车的放置
最新推荐文章于 2024-04-17 15:11:44 发布