hdoj 1505 최대 제로 매트릭스

11291 단어
#include<stdio.h>
#include<string.h>
char str[10]; int k,i,m,j,n,t,max; int map[1005][1005],l[1005],r[1005]; int main() {
    scanf("%d",&k); while(k--) {
        scanf("%d%d",&m,&n);
        memset(map[0],0,sizeof(map[0])); for(i=1;i<=m;i++) { for(j=1;j<=n;j++) {
                scanf("%s",str); if(str[0]=='F')
                    map[i][j]=map[i-1][j]+1; else
                    map[i][j]=0; } }
        max=-1; for(i=1;i<=m;i++) { for(j=1;j<=n;j++) {
                l[j]=r[j]=j; }
            map[i][0]=map[i][n+1]=-1; for(j=2;j<=n;j++) { while(map[i][j]<=map[i][l[j]-1])
                    l[j]=l[l[j]-1]; } for(j=n-1;j>=1;j--) { while(map[i][j]<=map[i][r[j]+1])
                    r[j]=r[r[j]+1]; } for(j=1;j<=n;j++) { if(map[i][j]*(r[j]-l[j]+1)>max)
                    max=map[i][j]*(r[j]-l[j]+1); } }
        printf("%d
"
,max*3); } return 0; }

좋은 웹페이지 즐겨찾기