Informatika gyűjtemény

Egy szinttel feljebb tri_sol.c

2004050607080910

NézetNyomtat

tri_sol.c (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 1 KB
/* SWERC'97 - Triangle      */
/* 11/11/97 - Matthias Ruhl */

#include <stdio.h>

#define MAXLINES 100
#define min(a,b) ((a)<(b)?(a):(b))

int n;
char t[MAXLINES][2*MAXLINES];

int largest()
{
  int i,j,h[2*MAXLINES],best;

  best = 0;
  /* down facing */
  for(i=0;i<2*n-1;i+=2)
    if(t[0][i] == '-') h[i] = best = 1; else h[i] = 0;
  for(i=1;i<n;i++)
    for(j=0;j<2*(n-i)-1;j+=2)
      if(t[i][j] == '-')
    {
      if(t[i-1][j+1] == '-')
        h[j] = 1+min(h[j],h[j+2]);
      else
        h[j] = 1;
      if(h[j] > best) best = h[j];
    }
      else h[j] = 0;
  /* up facing */
  for(i=n-2;i>=0;i--)
    {
      for(j=2*(n-i)-3;j>=1;j-=2)
    if(t[i][j] == '-')
      {
        if(t[i+1][j-1] == '-' && j > 1 && j < (2*(n-i)-3))
          h[j] = 1+min(h[j-2],h[j]);
        else
          h[j] = 1;
        if(h[j] > best) best = h[j];
      }
    else h[j] = 0;
    }
  return best*best;
}

int main()
{
  int i,caseno = 1;

  while(scanf("%d",&n) && n != 0)
    {
      for(i=0;i<n;i++) scanf("%s",t[i]);
      printf("Triangle #%d\n",caseno++);
      printf("The largest triangle area is %d.\n\n",largest());
    }
  return 0;
}
(Vissza)