City Game
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2512 Accepted Submission(s): 1016
Each area has its width and length. The area is divided into a grid of equal square units.The rent paid for each unit on which you're building stands is 3$.
Your task is to help Bob solve this problem. The whole city is divided into K areas. Each one of the areas is rectangular and has a different grid size with its own length M and width N.The existing occupied units are marked with the symbol R. The unoccupied units are marked with the symbol F.
R – reserved unit
F – free unit
In the end of each area description there is a separating line.
#include<stdio.h>
#include<string.h>
#define MX(a,b) (a>b?a:b)
#define N 1005
int f[N][N],l[N],r[N];
int n,m;
char s[5];
int max;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(f,0,sizeof(f));
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%s",s);
if(s[0]=='F')
f[i][j]=f[i-1][j]+1;
}
}
max=0;
int temp;
for(int k=1;k<=n;k++)
{
for(int i=1;i<=m;i++)
l[i]=r[i]=i;
for(int i=2;i<=m;i++)
{
temp=l[i];
while(f[k][temp-1]>=f[k][i]&&temp>1)
temp=l[temp-1];
l[i]=temp;
}
for(int i=m-1;i>=1;i--)
{
temp=r[i];
while(f[k][temp+1]>=f[k][i]&&temp<n)
temp=r[temp+1];
r[i]=temp;
}
for(int i=1;i<=m;i++)
max=MX(max,(r[i]-l[i]+1)*f[k][i]);
}
printf("%d\n",max*3);
}
return 0;
}