Re: 585 - Triangles
Posted: Mon Jun 13, 2011 12:22 am
Hi everybody. I've been submitting and trying to refine this code but so far it solves all cases I give it and i can't find what's wrong with it. OJ has been giving me verdict of WA even though it outputs just like the sample says.
i've also tried many inputs from forum responses and all have been correct.
anybody see what's missing?
i've also tried many inputs from forum responses and all have been correct.
anybody see what's missing?
Code: Select all
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int niveles=0;
void buscar_triangulo_abajo(char **m, int fila, int columna)
{
int j,cont=0;
if (m[fila][columna]=='-')
{
for (j=0-niveles;j<=niveles;j++)
{
if (m[fila][columna+j]=='-') cont++;
}
if (cont==(2*niveles+1))
{
niveles++;
buscar_triangulo_abajo(m,fila+1,columna);
}
}
}
void buscar_triangulo_arriba(char **m, int fila, int columna)
{
int j,cont=0;
if (m[fila][columna]=='-')
{
for (j=0-niveles;j<=niveles;j++)
{
if (m[fila][columna+j]=='-') cont++;
}
if (cont==(2*niveles+1))
{
niveles++;
buscar_triangulo_arriba(m,fila-1,columna);
}
}
}
int mayordelos2(int a, int b)
{
if (a>b) return a;
else return b;
}
int main()
{
char **m;
int n,i,j,area1=0,area2=0,area,contador=0;
while (scanf("%i\n",&n)==1)
{
area1=0;area2=0;
if (n==0)
{
break;
}
else
{
m = malloc((n+2) * sizeof(char *));
for (i=0;i<(n+2);i++)
{
m[i]=malloc((2*n-1) * sizeof(char));
if (i>0 && i<(n+1)) gets(m[i]);
else for (j=0;j<(2*n-1);j++) m[i][j]='#';
}
for (i=1;i<(n+1);i++)
{
for(j=i;j<(2*n-1-i);j=j+2)
{
niveles=0;
buscar_triangulo_abajo(m,i,j);
if (niveles>area1) area1=niveles;
}
}
for (i=n;i>0;i--)
{
for(j=(i-1);j<(2*n-i);j=j+2)
{
niveles=0;
buscar_triangulo_arriba(m,i,j);
if (niveles>area2) area2=niveles;
}
}
for (i=0; i<(n+2); i++)
free (m[i]);
free (m);
m=NULL;
contador++;
if(contador>1)
{
printf("\n");
}
area=mayordelos2(area1,area2);
printf("Triangle #%i\n",contador);
printf("The largest triangle area is %i.\n",area*area);
}
}
return 0;
}