码迷,mamicode.com
首页 > 其他好文 > 详细

UVA - 585 Triangles

时间:2014-07-10 22:09:52      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:style   blog   os   2014   for   io   

题意:求最大的三角形

思路:先初始化从左到右和从右到左的最大连续的‘-’,然后就是当奇数列的时候找头向下的三角形,偶数的时候相反找

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 200;

char  map[MAXN][MAXN];
int Left[MAXN][MAXN], Right[MAXN][MAXN];
int n;

int main() {
	int cas = 1;
	while (scanf("%d", &n) != EOF && n) {
		memset(map, 0, sizeof(map));
		memset(Left, 0, sizeof(Left));
		memset(Right, 0, sizeof(Right));
		for (int i = 1; i <= n; i++)
			scanf("%s", map[i]+1);
		for (int i = 1; i <= n; i++) {
			int len = strlen(map[i]+1);
			for (int j = len; j >= 1; j--)		
				if (map[i][j] == '-')
					Left[i][j] = Left[i][j+1] + 1;
				else Left[i][j] = 0;
			for (int j = 1; j <= len; j++)
				if (map[i][j] == '-')
					Right[i][j] = Right[i][j-1] + 1;
				else Right[i][j] = 0;
		}
		int ans = -1;
		for (int i = 1; i <= n; i++) {
			int len = strlen(map[i]+1);
			for (int j = 1; j <= len; j++)
				if (j&1) {
					int x = 0;
					while (i-x >= 1 && Left[i-x][j] >= 2*x+1)
						x++;
					ans = max(ans, x);
				}
				else {
					int x = 0;
					while (x+i <= n && Right[x+i][j] >= 2*x+1)
						x++;
					ans = max(ans, x);
				}
		}
		printf("Triangle #%d\nThe largest triangle area is %d.\n\n", cas++, ans*ans);
	}
	return 0;
}



UVA - 585 Triangles,布布扣,bubuko.com

UVA - 585 Triangles

标签:style   blog   os   2014   for   io   

原文地址:http://blog.csdn.net/u011345136/article/details/37599051

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!