Cod sursa(job #1430374)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 8 mai 2015 12:00:20
Problema Cowfood Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <cstdio>
#include <algorithm>
#define MOD 3210121
#define INF 2000000000
#define Nmax 35

using namespace std;

int a[Nmax][Nmax],v[Nmax],fact[100005],n;

inline int Pow_Log(int x, int p)
{
    int sol=1;
    while(p)
    {
        if(p&1)
        {
            sol=(1LL*sol*x)%MOD; --p;
        }
        p>>=1;
        x=(1LL*x*x)%MOD;
    }
    return sol;
}

inline int Comb(int n, int k)
{
    return (1LL*((1LL*fact[n]*Pow_Log(fact[k],MOD-2))%MOD)*Pow_Log(fact[n-k],MOD-2))%MOD;
}

int main()
{
    int sol=0,i,j,kkt,s,k,stare;
    for(i=0;i<=s;++i) sol+=Comb(i+k-1,k-1);
    freopen ("cowfood.in","r",stdin);
    freopen ("cowfood.out","w",stdout);
    fact[0]=1;
    for(i=1;i<=100000;++i) fact[i]=(1LL*fact[i-1]*i)%MOD;
    scanf("%d%d%d", &k,&s,&n);
    for(i=1;i<=n;++i)
        for(j=1;j<=k;++j) scanf("%d", &a[i][j]);
    for(stare=1;stare<(1<<n);++stare)
    {
        int cnt=0;
        for(i=1;i<=k;++i) v[i]=-INF;
        for(j=0;j<n;++j)
            if((1<<j)&stare)
            {
                ++cnt;
                for(kkt=1;kkt<=k;++kkt) v[kkt]=max(v[kkt],a[j][kkt]);
            }
        int S=0;
        for(kkt=1;kkt<=k;++kkt) S+=v[kkt];
        if(cnt&1)
        {
            //sol-=Comb(S+k-1,k-1);
            if(sol<0) sol+=MOD;
        }
        else
        {
            //sol+=Comb(S+k-1,k-1);
            if(sol>=MOD) sol-=MOD;
        }
    }
    return 0;
}