没考虑这么多,直接用搜索。打了半多小时交上去WA,看了好久。。。终于发现原来这题有个很faint的地方。举个例子就知道了:
左边这个家伙输进去出来的结果应该是1,而不是4。
3
#---#
#-#
-
Accepted | 1245 | C | 00:00.02 | 404K |
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
int n;
int expand(char* tr[],int bx,int by)
{
int i,j;
for (i = bx + 1; i <= n; i++ )
{
for (j = by; j < by + 2 * (i - bx) + 1; j++ )
if (tr[i][j] == '#') break ;
if (j < by + 2 * (i - bx) + 1) break ;
}
return i - bx;
}
int expand1(char* tr[],int bx,int by)
{
int i,j;
for (i = bx - 1; i >= 1; i-- )
{
for (j = by; j > by - 2 * (bx - i) - 1; j-- )
{
if ((j >= 2 * i - 1) || (j < 0)) break ;
if (tr[i][j] == '#') break ;
}
if (j > by - 2 * (bx - i) - 1) break ;
}
return bx - i;
}
void solve()
{
int i,j,ans = 0 ;
char* tr[101 ];
for (i = n; i >= 1; i-- )
{
tr[i] = (char*)malloc(sizeof(char) * (2* n));
scanf("%s" ,tr[i]);
}
for (i = 1; i <= n - ans; i++ )
for (j = 0; j < i * 2 - 1; j += 2 )
if (tr[i][j] == '-' )
{
int temp = expand(tr,i,j);
ans = temp > ans ? temp : ans;
}
for (i = n; i >= 2 * ans; i-- )
for (j = 1; j < i * 2 - 1; j += 2 )
if (tr[i][j] == '-' )
{
int temp = expand1(tr,i,j);
ans = temp > ans ? temp : ans;
}
for (i = 1; i <= n; i++ ) free(tr[i]);
printf("The largest triangle area is %d./n",ans * ans);
}
void main()
{
#ifndef ONLINE_JUDGE
freopen("1245.txt","r" ,stdin);
#endif
int t = 0 ;
while (scanf("%d",&n) != EOF && n != 0 )
{
printf("Triangle #%d/n",++ t);
solve();
printf("/n" );
}
#ifndef ONLINE_JUDGE
fclose(stdin);
#endif
}
#include <stdlib.h>
#include <string.h>
int n;
int expand(char* tr[],int bx,int by)
{
int i,j;
for (i = bx + 1; i <= n; i++ )
{
for (j = by; j < by + 2 * (i - bx) + 1; j++ )
if (tr[i][j] == '#') break ;
if (j < by + 2 * (i - bx) + 1) break ;
}
return i - bx;
}
int expand1(char* tr[],int bx,int by)
{
int i,j;
for (i = bx - 1; i >= 1; i-- )
{
for (j = by; j > by - 2 * (bx - i) - 1; j-- )
{
if ((j >= 2 * i - 1) || (j < 0)) break ;
if (tr[i][j] == '#') break ;
}
if (j > by - 2 * (bx - i) - 1) break ;
}
return bx - i;
}
void solve()
{
int i,j,ans = 0 ;
char* tr[101 ];
for (i = n; i >= 1; i-- )
{
tr[i] = (char*)malloc(sizeof(char) * (2* n));
scanf("%s" ,tr[i]);
}
for (i = 1; i <= n - ans; i++ )
for (j = 0; j < i * 2 - 1; j += 2 )
if (tr[i][j] == '-' )
{
int temp = expand(tr,i,j);
ans = temp > ans ? temp : ans;
}
for (i = n; i >= 2 * ans; i-- )
for (j = 1; j < i * 2 - 1; j += 2 )
if (tr[i][j] == '-' )
{
int temp = expand1(tr,i,j);
ans = temp > ans ? temp : ans;
}
for (i = 1; i <= n; i++ ) free(tr[i]);
printf("The largest triangle area is %d./n",ans * ans);
}
void main()
{
#ifndef ONLINE_JUDGE
freopen("1245.txt","r" ,stdin);
#endif
int t = 0 ;
while (scanf("%d",&n) != EOF && n != 0 )
{
printf("Triangle #%d/n",++ t);
solve();
printf("/n" );
}
#ifndef ONLINE_JUDGE
fclose(stdin);
#endif
}