Pagini recente » Cod sursa (job #833232) | Cod sursa (job #1854133) | Cod sursa (job #366873) | Cod sursa (job #885477) | Cod sursa (job #268729)
Cod sursa(job #268729)
# include <stdio.h>
const int S=3210121;
int mat[50][50],aux[50],sol,n,s,nb,m,nr_moduri[10002][31];
void fill()
{
int sum,c;
for (c=1;c<=n;c++) nr_moduri[0][c]=1;
for (sum=1;sum<=s;sum++) nr_moduri[sum][0]=1;
for (sum=1;sum<=s;sum++)
for (c=1;c<=n;c++)
{
nr_moduri[sum][c]=nr_moduri[sum][c-1]+nr_moduri[sum-1][c];
nr_moduri[sum][c]%=S;
}
}
int get_amount( int *v, int n)
{
int i,sum=0;
for (i=1;i<=n;i++)
sum+=v[i];
if (sum<=s)
{
// printf("%ld\n",nr_moduri[s-sum][n]);
return nr_moduri[s-sum][n];
}
return 0;
}
void copy( int *d, int *s, int n)
{
int i;
for (i=1;i<=n;i++) d[i]=s[i];
}
void intersect( int *d, int *s, int n)
{
int i;
for (i=1;i<=n;i++)
if (s[i]>d[i]) d[i]=s[i];
}
void citire()
{
FILE *f=fopen("cowfood.in","r");
fscanf(f,"%ld%ld%ld",&n,&s,&m);
int i,j;
for (i=1;i<=m;i++)
for (j=1;j<=n;j++) fscanf(f,"%ld",&mat[i][j]);
fclose(f);
}
void back( int pos)
{
int safe[31];
if (pos==m+1)
{
if (nb%2==0) sol+=get_amount(aux,n);
else sol-=get_amount(aux,n);
//normalizam sol;
while (sol<0) sol+=S;
sol%=S;
}
else
{
//nu intersectam cu cel curent
back(pos+1);
//intersectam cu cel curent
copy(safe,aux,n);
intersect(aux,mat[pos],n);
nb++;
back(pos+1,nb+1);
nb--;
copy(aux,safe,n);
}
}
void scrie(int sol)
{
FILE *g=fopen("cowfood.out","w");
fprintf(g,"%ld\n",sol);
fclose(g);
}
int main()
{
citire();
fill();
back(1,0);
// int total=nr_moduri[s][n]+sol-(1+s*n);
//total%=S;
//total-=sol;
//while (total<0) total+=S; total%=S;
scrie(sol-(1+s*n));
//getchar();
return 0;
}