Cod sursa(job #1717001)

Utilizator Bodo171Bogdan Pop Bodo171 Data 14 iunie 2016 09:34:04
Problema Cowfood Scor 2
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <iostream>
#include<fstream>
using namespace std;
const int mod=3210121;
long long  a[25][35],p,tot,sum,s,comp[35];
int i,j,k,x,fix,n,grd,num;
bool dontcare[25],ok;
int main()
{
    ifstream f("cowfood.in");
    ofstream g("cowfood.out");
    f>>k>>s>>n;
    for(i=1;i<=n;i++)
       {
           sum=0;
           for(j=1;j<=k;j++)
           {
            f>>a[i][j];
            sum+=a[i][j];
           }
           if(sum>s) dontcare[i]=1;
       }
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            if(i!=j)
        {
            ok=1;
          for(x=1;x<=k;x++)
         {
           if(a[i][x]<a[j][x]) ok=0;
         }
         if(ok==1) {dontcare[i]=1;}
        }
        for(i=1;i<=n;i++)
        {
             if(dontcare[i]==0)
                {num++;
                for(x=1;x<=k;x++)
                {
                    a[num][x]=a[i][x];
                }}
        }
        n=num;
        fix=(1<<n)-1;
    for(i=1;i<=fix;i++)
    {
        for(x=1;x<=k;x++) comp[x]=s+1;
        grd=0;
        for(j=0;j<n;j++)
        {
            if((i&(1<<j))&&dontcare[j+1]==0)
            {
                grd++;
                for(x=1;x<=k;x++)
                    if(a[j+1][x]<comp[x]) comp[x]=a[j+1][x];
            }
        }
        p=1;
        for(x=1;x<=k;x++)
        {
            p*=comp[x];
            p%=mod;
        }
        p-=1;
        if(p<0) p+=mod;
        if(grd%2==0) {tot-=p;if(tot<0) tot+=mod;}
        else {tot+=p;if(tot>=mod) tot-=mod;}

    }
    g<<tot;
    return 0;
}