题意:
问组成的最大的三角形,有几个小三角形组成;
思路:
遍历每一个小三角形,把这个当做大三角形的定点,去往上搜,或者往下搜;
每一行最左边的都是要往上搜,然后依次往下,往上...(因为小三角形的朝向不同);
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 105;
char g[N][2 * N];
int n, Max;
int cul(int s,int x, int y) {
int cur = 1;
Max = max(Max,cur);
int xx = x,y1 = y,y2 = y;
while(1) {
bool flag = 0;
if(s == 0) {
xx--;y1--;y2++;
}else {
xx++;y1--;y2++;
}
if(xx < 0 || xx > n || y1 < 0 || y2 > 2 * n - 1)
break;
for(int i = y1; i <= y2; i++) {
if(g[xx][i] != '-') {
flag = 1;
break;
}
}
if(flag)
break;
else {
cur += (y2 - y1 + 1);
Max = max(Max,cur);
}
}
}
int main() {
int cas = 1;
while(scanf("%d",&n) && n) {
Max = 0;
memset(g, 0, sizeof(g));
for(int i = 0; i < n; i++) {
scanf("%s",g[i] + i);
}
for(int i = 0; i < n; i++) {
int len = strlen(g[i] + i);
for(int j = i; j < i + len; j++) {
if(g[i][j] == '-') {
if((i + j) % 2 == 0)
cul(0,i,j);
else
cul(1,i,j);
}
}
}
printf("Triangle #%d\nThe largest triangle area is %d.\n\n",cas++,Max);
}
}