Cod sursa(job #3303183)

Utilizator vicvicGriga Victor-Cristian vicvic Data 14 iulie 2025 15:17:52
Problema Cowfood Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream f ("cowfood.in");
ofstream g ("cowfood.out");
const int mod=3210121;
int k, s, n;
int mat[25][35], c[10101][31], sum[10101];
int ret=0;
void precalc ()
{
    for (int i=0;i<10101;i++)
    {
        c[i][0]=1;
        for (int j=1;j<=min (i, 30ll);j++)
        {
            c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
        }
    }
    sum[0]=1;
    for (int i=1;i<=s;i++)
    {
        sum[i]=(sum[i-1]+c[i+k-1][k-1])%mod;
    }
}
int table[25][35];
void bk (int poz, int sgn)
{
    if (poz==n+1)
    {
        int s1=s;
        for (int i=1;i<=k;i++)
        {
            s1-=table[poz-1][i];
        }
        if (s1>=0) ret=(ret+mod+sum[s1]*sgn)%mod;
    }
    else
    {
        for (int i=1;i<=k;i++)
            table[poz][i]=table[poz-1][i];
        bk (poz+1, sgn);
        for (int i=1;i<=k;i++)
            table[poz][i]=max (table[poz-1][i], mat[poz][i]);
        bk (poz+1, -sgn);
    }
}
int32_t main ()
{
    f >> k >> s >> n;
    for (int i=1;i<=n;i++)
    {
        for (int j=1;j<=k;j++)
        {
            f >> mat[i][j];
        }
    }
    precalc ();
    ret=(mod*2-s*k-1)%mod;
    bk (1, 1);
    g << ret;
    return 0;
}