Cod sursa(job #2297168)

Utilizator ScarymovieMocanu Alexandru Scarymovie Data 5 decembrie 2018 15:25:36
Problema Cowfood Scor 36
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include<vector>
#define PRIM 3210121
using namespace std;
ifstream f("cowfood.in");
ofstream g("cowfood.out");
int c[10030][30],k,S,n,a[20][30];
void calculeaza_comb()
{
    c[0][0]=1;
    for(int i=1;i<k+S;++i)
    {
        c[i][0]=1;
        for(int j=1;j<min(k,i);++j)
            c[i][j]=(c[i-1][j-1]+c[i-1][j])%PRIM;
        if(i<k) c[i][i]=1;
    }
    return ;
}
int main()
{
    f>>k>>S>>n;
    for(int i=0; i<n; ++i)
        for(int j=0; j<k; ++j)
            f>>a[i][j];
    calculeaza_comb();
    int ans=0;
    for(int gen=0; gen<(1<<n); ++gen)
    {
        vector<int> Max(k,0);
        int sgn=1;
        for(int i=0; i<n; ++i)
            if(gen&(1<<i))
            {
                sgn*=-1;
                for(int j=0; j<k; ++j)
                    Max[j]=max(Max[j],a[i][j]);
            }
        int sum=0;
        for(int j=0; j<k; ++j)
            sum+=Max[j];
        for(int i=0; i<=S-sum; ++i)
        {
            ans+=sgn*c[i+k-1][k-1];
            ans%=PRIM;
        }
        //g<<gen<<' '<<ans<<'\n';
    }
    ans-=(S*k+1);
    ans%=PRIM;
    g<<ans<<'\n';
    return 0;
}