题目描述
给出一个n×n的矩阵,矩阵中,有些格子被染成白色,有些格子被染成黑色,现要求矩阵中白色矩形的数量
输入输出格式
输入格式:
第一行,一个整数n,表示矩形的大小。
接下来n行,每行n个字符,这些字符为“W”或“B”。其中“W”表示白格,“B”表示黑格。
输出格式:
一个正整数,为白色矩形数量
输入样例:
4
WWBW
BBWB
WBWW
WBWB
输出:
15
#include<stdio.h>
char a[151][151];
unsigned char d[151][151][151];
unsigned char num[151][151];
unsigned int sum;
char ch;
int min;
int main()
{
int i,j,k,n;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
do
{
ch=getchar();
}
while(ch!='W' && ch!='B');
a[i][j]=ch;
}
for(j=0;j<n;j++)
if(a[n-1][j]=='W')
{
num[n-1][j]=1;
for(k=j;k<n;k++)
if(a[n-1][k]!='W')
break;
d[n-1][j][0]=k-j;
}
for(i=n-2;i>=0;i--)
for(j=0;j<n;j++)
if(a[i][j]=='W')
{
num[i][j]=num[i+1][j]+1;
for(k=0;k<num[i+1][j];k++)
d[i][j][k+1]=d[i+1][j][k];
for(k=j;k<n;k++)
if(a[i][k]!='W')
break;
d[i][j][0]=k-j;
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(a[i][j]=='W')
{
min=d[i][j][0];
for(k=0;k<num[i][j];k++)
{
if(d[i][j][k]<min)
min=d[i][j][k];
sum+=min;
}
}
printf("%d",sum);
return 0;
}