Pagini recente » Cod sursa (job #1592597) | Cod sursa (job #1801725) | Cod sursa (job #2968015) | Cod sursa (job #2556258) | Cod sursa (job #2169794)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f ("cowfood.in");
ofstream g ("cowfood.out");
typedef long long ll;
const ll mod=3210121;
const int nmax=33;
ll usu[nmax],k,s,n,v[nmax][nmax],tt,act,smn,sol;
ll put(ll t,ll b)
{
ll a=1ll,p=1ll*t;
while(b)
{
if(b&1) a=a*p%mod;
p=p*p%mod;
b/=2;
}
return a;
}
ll comb(ll n,ll k)
{
ll a=1ll,b=1ll;
for(ll i=k+1;i<=n;++i)
{
a=1ll*a*i%mod;
}
for(ll i=2;i<=(n-k);++i)
{
b=1ll*b*i%mod;
}
b=put(b,mod-2)%mod;
a=a*b%mod;
return a;
}
int main()
{
f>>k>>s>>n;
sol=((comb(k,2)%mod)*comb(k+s-3,k-1))%mod;
for(ll i=1;i<=n;++i)
{
for(ll j=1;j<=k;++j)
{
f>>v[i][j];
}
}
for(ll i=1;i<(1<<k)-1;++i)
{
tt=i;
act=1;
memset(usu,0,sizeof(usu));
while(tt)
{
if(tt&1)
{
for(ll j=1;j<=k;++j) usu[j]=max(usu[j],v[act][j]);
}
++act;
tt/=10;
}
if(act%2) smn=1;
else smn=-1;
act=0;
for(ll j=1;j<=k;++j) act+=usu[j];
sol=sol+(smn*comb(k+act-1,k-1))%mod;
while(sol>mod) sol-=mod;
while(sol<0) sol+=mod;
}
g<<sol;
return 0;
}