Cod sursa(job #125440)

Utilizator IoannaPandele Ioana Ioanna Data 20 ianuarie 2008 12:52:40
Problema Piese Scor 100
Compilator cpp Status done
Runda preONI 2008, Runda 3, Clasa a 9-a Marime 1.65 kb
#include<stdio.h>
long x[510][510];
long lg[10],lt[10],n,m,nr;
typedef struct {int inc,sf;}TINT;
TINT l[510],c[510];

void read()
{
scanf("%ld%ld",&m,&n);
}

void descb2(long x,long p[])
{
long k,j;
int i;
j=0;
for (i=0;i<=10;i++)
    {
     k=1;
     k=(k<<i);
     if (k & x)
	{
	 p[++j]=k;
	}
    }
p[0]=j;
}

void rez()
{
long i,j;
long np=0,min,lim,k,lc,cc;
int w;


i=1;
j=1;
while (i<=lg[0])
      {j=1;
      while (j<=lt[0])
	    {
	     if (lg[i]<lt[j])
		min=1;
	     else min=2;
	     if (min==1)
		{
		lim=(lt[j]/lg[i]);
		 nr+=lim;

		 k=1;
		 lc=l[j].inc;

		 while (k<=lim)
		       {
			np++;

			for (w=1;w<=lg[i];w++)
			    {for (cc=c[i].inc;cc<=c[i].sf;cc++)
				{x[lc][cc]=np;}
				lc++;}
			k++;
		       }
		}
	    else {
		  lim=(lg[i]/lt[j]);
		 nr+=lim;

		 k=1;
		 cc=c[i].inc;
		 while (k<=lim)
		       {
			np++;

			for (w=1;w<=lt[j];w++)
			    {for (lc=l[j].inc;lc<=l[j].sf;lc++)
				 {x[lc][cc]=np;}
			     cc++;}

			    k++;
		       }
		}
		j++;
		 }
		i++;
		}

}

void afisare()
{
int i,j;
printf("%ld\n",nr);
for (i=1;i<=m;i++)
    {
      for (j=1;j<=n;j++)
	   printf("%ld ",x[i][j]);
      printf("\n");
      }
}

int main()
{
freopen("piese.in","r",stdin);
freopen("piese.out","w",stdout);
read();
descb2(m,lt);
long i;
i=1;
l[0].inc=l[0].sf=0;
while (i<=lt[0])
     {l[i].inc=l[i-1].sf+1;
      l[i].sf=l[i].inc+lt[i]-1;
      i++;
     }
descb2(n,lg);
i=1;
c[0].inc=c[0].sf=0;
while (i<=lg[0])
     {c[i].inc=c[i-1].sf+1;
      c[i].sf=c[i].inc+lg[i]-1;
      i++;
     }

rez();
afisare();
fcloseall();
return 0;
}