Pagini recente » Cod sursa (job #2512924) | Cod sursa (job #983326) | Cod sursa (job #1660224) | Monitorul de evaluare | Cod sursa (job #127351)
Cod sursa(job #127351)
#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;
}