hdu1505 City Game

一开始狂WA,后来随机了100个数据全过,无语了。。。

后来把ch改成ch[10]

过了。。。

这题的数据太黑了= =必须得用%s过滤

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
int m,n;
int d[1010][1010];
int left[1010];
int right[1010];
int main()
{
    int total;
    scanf("%d",&total);
    getchar();
    while(total--)
    {
        scanf("%d %d",&m,&n);
        int i,j;
        char ch[10];
        getchar();
        for(i=0;i<m;i++)
        {
            for(j=0;j<n;j++)
            {
                scanf("%s",ch);
                if(ch[0]=='F')
                {
                    if(i==0)
                    {
                        d[i][j]=1;
                    }
                    else
                    {
                        d[i][j]=d[i-1][j]+1;
                    }
                }
                if(ch[0]=='R')
                {
                    d[i][j]=0;
                }
            }
        } 
        int mmax=0;
        while(m)
        {
            for(i=0;i<n;i++)
            {
                left[i]=i;
                right[i]=i;
            }
            for(i=1;i<n;i++)
            {
                if(left[i]-1<0)
                {
                    continue;;
                }
                while(d[m-1][left[i]-1]>=d[m-1][i])
                {
                    left[i]=left[left[i]-1];
                    if(left[i]-1<0)
                    {
                        break;
                    }
                }
            }
            for(i=n-2;i>=0;i--)
            {
                if(right[i]+1>n-1)
                {
                    continue;
                }
                while(d[m-1][right[i]+1]>=d[m-1][i])
                {
                    right[i]=right[right[i]+1];
                    if(right[i]+1>n-1)
                    {
                        break;
                    }
                }
            }
            int temp;
            for(i=0;i<n;i++)
            {
                temp=d[m-1][i]*(right[i]-left[i]+1);
                if(mmax<temp)
                {
                    mmax=temp;
                }
            }
            m--;
        }
        printf("%d\n",mmax*3);
    }
    return 0;
}
posted @ 2012-08-10 15:34  willzhang  阅读(252)  评论(0编辑  收藏  举报