585 - Triangles(简单题)

来源:互联网 发布:等距抽样的算法 编辑:程序博客网 时间:2024/06/05 00:56

很简单的题目,通过观察可以发现,每一行的奇数个都是尖头向下的三角形,偶数个都是尖头向上的。 所以我们不妨分一下类,对于尖头向上的就向下扩展,反之向上扩展。如果可以拓展就更新答案。

细节参见代码:

#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll INF = 1000000000;const int maxn = 100+5;int n,m,kase = 0;char s[maxn][2*maxn];int main() {    while(~scanf("%d",&n)&&n) {        getchar();        int ans = 0;        for(int i=1;i<=n;i++) gets(s[i]+1);        for(int i=1;i<=n;i++) {            int v = 0;            for(int j=i;j<=2*n-i;j++) {                ++v;                if(s[i][j] == '#') continue;                if(v%2) {                    int l = j-1, r = j+1, rol = i-1, cur = 1;                    while(true) {                        if(l < rol || r > 2*n-rol) break;                        if(rol < 1) break;                        bool ok = true;                        for(int k=l;k<=r;k++) {                            if(s[rol][k] == '#') { ok = false; break; }                        }                        if(ok) cur += (r-l+1), rol--, --l , ++r ;                        else break;                    }                    ans = max(ans,cur);                }                else {                    int l = j-1, r = j+1, rol = i+1, cur = 1;                    while(true) {                        if(l < rol || r > 2*n-rol) break;                        if(rol > n) break;                        bool ok = true;                        for(int k=l;k<=r;k++) {                            if(s[rol][k] == '#') { ok = false; break; }                        }                        if(ok) cur += (r-l+1), rol++, --l, ++r;                        else break;                    }                    ans = max(ans,cur);                }            }        }        printf("Triangle #%d\n",++kase);        printf("The largest triangle area is %d.\n\n",ans);    }    return 0;}


0 0
原创粉丝点击