A - City Game
#include<cstdio> #include<cstdlib> #include<iostream> using namespace std; #define N 1002 int map[N][N]; int main() { int i,j,m,n,Min,area,high,t,k; char c[100]; scanf("%d",&t); while(t--) { for(i=0; i<N; i++) for(j=0; j<N; j++) map[i][j]=0; //初始化全为0 scanf("%d%d",&n,&m); area=0; for(i=1; i<=n; i++) { for(j=1; j<=m; j++) { scanf("%s",&c); //可能有多个空格,%c的话就WA了 if(c[0]=='F') map[i][j]=map[i][j-1]+1; else map[i][j]=0; } //输入一行,求一次最大面积 for(j=1; j<=m; j++) { if(map[i][j]!=0) { Min=map[i][j]; //记录这一列[i][j]的最小值 if(area<map[i][j]) area=map[i][j]; //此时这一行的面积即是[i][j]的值,应为[i][j]记录的就是F high=1; //高的初值应该为1(只有自身一行) for(k=i-1; k>=1; k--) //向上查找 { if(map[k][j]==0) //遇到R就可以退出了 break; else if(map[k][j]!=0) { high++; //找到一个F,高度加1 if(map[k][j]<Min) //更新这一列[i][j]的最小值 Min=map[k][j]; if(area<high*Min) //计算面积并更新 area=high*Min; } } } } } printf("%d\n",area*3); } return 0; }
http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=228#problem/A