Cod sursa(job #3330371)

Utilizator WiseAndrei4Vetrila Andrei WiseAndrei4 Data 19 decembrie 2025 00:04:48
Problema Cowfood Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <vector>
#define ll long long
// #define fin cin
// #define gout cout
using namespace std;
ifstream fin("cowfood.in");
ofstream gout("cowfood.out");
const int MOD=3210121,smax=10001;
int k,s,n,v,e;
int m[21][31],x[21],maxi[21][31],scomb[smax];
void calcul()
{
    for(int i=0; i<=s; ++i)scomb[i]=1;
    for(int i=1; i<=k; ++i)for(int j=1; j<=s; ++j)scomb[j]=(scomb[j]+scomb[j-1])%MOD;
}
void bck(int k)
{
    for(int i=x[k-1]+1; i<=n; ++i)
    {
        int r=0;
        for(int j=1; j<=::k; ++j)
        {
            maxi[k][j]=max(maxi[k-1][j],m[i][j]);
            r+=maxi[k][j];
        }
        if(r<=s)
        {
            if(k%2)
            {
                e+=scomb[s-r];
                if(e>=MOD)e-=MOD;
            }
            else
            {
                e-=scomb[s-r];
                if(e<0)e+=MOD;
            }
            x[k]=i;
            bck(1+k);
        }
    }
}
int main()
{
    fin>>k>>s>>n;
    for(int i=1; i<=n; ++i)for(int j=1; j<=k; ++j)fin>>m[i][j];
    calcul();
    bck(1);
    v=scomb[s]-s*k-1-e;
    v%=MOD;
    if(v<0)v+=MOD;
    gout<<v;
    return 0;
}