Cod sursa(job #127351)

Utilizator FlorianFlorian Marcu Florian Data 23 ianuarie 2008 19:23:17
Problema Piese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<stdio.h>
FILE*f=fopen("piese.in","r");
FILE*g=fopen("piese.out","w");
long a[510][510],n,m,min;
void det_sol(long i, long j,long ii, long jj) //drept cu coltu stanga sus in i,j
   {
    int k=0,l1,l2,o,l;
    if(ii>n || jj>m || i<0 ||j<0 ||i>ii ||j>jj);
    else{
    l1=ii-i+1;
    l2=jj-j+1;
    if(l1>l2)
        {
         l1=l1^l2;
         l2=l2^l1;
         l1=l1^l2;
        }
    //acu am l1 latura mica
    while((1<<k)<=l1) ++k;
    k--;
    //completez matricea:
    min++;
    for(o=i;o<i+l1;++o)
       for(l=j;l<j+l1;++l) a[o][l]=min;
    det_sol(i,j+(1<<k), i+(1<<k)-1,jj);
    det_sol(i+(1<<k),j, ii,jj);   }
    }
int main()
   {
    fscanf(f,"%ld %ld",&n,&m);
    det_sol(1,1,n,m);
    fprintf(g,"%ld\n",min);
    for(int i=1;i<=n;++i)
       {
	for(int j=1;j<=m;++j)
	  fprintf(g,"%ld ",a[i][j]);

       fprintf(g,"\n");
       }
    return 0;
   }