Pagini recente » Cod sursa (job #1664172) | Cod sursa (job #1376347) | Cod sursa (job #2655524) | Cod sursa (job #3286179) | Cod sursa (job #435811)
Cod sursa(job #435811)
#include<stdio.h>
#include<stdlib.h>
unsigned char min(unsigned char a,unsigned char b,unsigned char c)
{
if(a<=b && a<=c) return a;
if(b<=a && b<=c) return b;
return c;
}
unsigned char minim(unsigned char a,unsigned char b,unsigned char c,unsigned char d)
{
if(a<=b && a<=c && a<=d) return a;
if(b<=a && b<=c && b<=d) return b;
if(c<=a && c<=b && c<=d) return c;
return d;
}
int main()
{
FILE *in;
FILE *out;
in=fopen("figuri2.in","r");
out=fopen("figuri2.out","w");
int N;
fscanf(in,"%d",&N);
unsigned char mat[N][N];
unsigned char patrat[N][N];
unsigned char romb[N][N];
int max=0,i,j,Rmax=0;
int nr_patrate=0,nr_romburi=0;
int k=0;
for(i=0;i<N;i++)
fscanf(in,"%s",mat[i]);
for(i=0;i<N;i++)
for(j=0;j<N;j++)
mat[i][j]=mat[i][j]-48;
for(i=0;i<N;i++)
{
patrat[0][i]=mat[0][i];
patrat[i][0]=mat[i][0];
if((patrat[0][i] ==1)||(patrat[i][0]==1))
max=1;
romb[0][i]=mat[0][i];
romb[i][0]=mat[i][0];
romb[1][i]=mat[1][i];
romb[i][N-1]=mat[i][N-1];
if((romb[0][i] ==1)||(romb[i][0]==1)||(romb[1][i]==1)||(romb[i][N-1]==1))
Rmax=1;
}
for(i=1;i<N;i++)
{
for(j=1;j<N;j++)
{
if(mat[i][j]==0)
{
patrat[i][j]=0;
romb[i][j]=0;
}
else
{
patrat[i][j]=min(patrat[i][j-1]+1,patrat[i-1][j]+1,patrat[i-1][j-1]+1);
if(i!=1)
if(j!=(N-1))
romb[i][j]=minim(romb[i-1][j-1]+1,romb[i-1][j]+1,romb[i-1][j+1]+1,romb[i-2][j]+1);
if(patrat[i][j]==max)
nr_patrate++;
if(romb[i][j]==Rmax)
nr_romburi++;
if(patrat[i][j]>max)
{
nr_patrate=0;
max=patrat[i][j];
}
if(romb[i][j]>Rmax)
{
nr_romburi=0;
Rmax=romb[i][j];
}
}
}
}
if(max==1)
{
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(patrat[i][j]==1)
k++;
fprintf(out,"1 %d\n",k);
}
else
{
if(max>0)
{
fprintf(out,"%d %d\n",max,(nr_patrate+1));
}
}
k=0;
if(Rmax==1)
{
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(romb[i][j]==1)
k++;
fprintf(out,"1 %d\n",k);
}
else
{
if(Rmax>0)
{
fprintf(out,"%d %d",Rmax,(nr_romburi+1));
}
}
fclose(in);
fclose(out);
return 0;
}