Pagini recente » Cod sursa (job #15434) | Cod sursa (job #369377) | Cod sursa (job #2348062) | Cod sursa (job #11179) | Cod sursa (job #526591)
Cod sursa(job #526591)
#include<stdio.h>
#include<stdlib.h>
int a[501][501],m,n,nr,v[10];
FILE *fin,*fout;
int cautare(int x){
int p,u,m;
p=1;
u=8;
while(p<=u){
m=(p+u)/2;
if(v[m]<x)
p=m+1;
if(v[m]>x)
u=m-1;
if(v[m]==x)
return v[m];
}
return v[u];
}
void suprafata(int i,int j,int x,int y){
int lung,lat,l,min,k,q;
if(i<x && j<y){
nr++;
lung=abs(i-x)+1;
lat=abs(j-y)+1;
min=(lung+lat-abs(lung-lat))/2;
l=cautare(min);
for(k=i;k<=i+l-1;k++){
for(q=j;q<=j+l-1;q++){
a[k][q]=nr;
}
}
suprafata(i,j+l,i+l-1,y);
suprafata(i+l,j,x,y);
}
}
int main(){
fin=fopen("piese.in","r");
fout=fopen("piese.out","w");
fscanf(fin,"%d %d",&m,&n);
v[1]=1;
int i,j;
for(i=2;v[i]<500;i++){
v[i]=v[i-1]*2;
}
suprafata(1,1,m,n);
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
if(a[i][j]==0){
nr++;
a[i][j]=nr;
}
}
}
fprintf(fout,"%d\n",nr);
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
fprintf(fout,"%d ",a[i][j]);
}
fprintf(fout,"\n");
}
return 0;}