P1191

矩形

题目描述

给出一个 \(n \times n\) 的矩阵,矩阵中,有些格子被染成白色,有些格子被染成黑色,现要求矩阵中白色矩形的数量。

输入格式

第一行,一个整数 \(n\),表示矩形的大小。

接下来 \(n\) 行,每行 \(n\) 个字符,这些字符为 \(\verb!W!\)\(\verb!B!\)。其中 \(\verb!W!\) 表示白格,\(\verb!B!\) 表示黑格。

输出格式

一个正整数,为白色矩形数量。

样例 #1

样例输入 #1

4
WWBW
BBWB
WBWW
WBWB

样例输出 #1

15

提示

对于\(30\%\)的数据,\(n ≤ 50\)

对于\(100\%\)的数据,\(n ≤ 150\)

对于每个(i,j)只用快速算出以(i,j)为左下角 能向右延伸的每个底的高即可保证不重复
思想很精妙!
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,tot,h[155];
char ch[155][155];
signed main()
{
	ios::sync_with_stdio(false);
	cin>>n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			cin>>ch[i][j];
	int now;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(ch[i][j]=='W')h[j]++;
			else h[j]=0;
		}
		for(int j=1;j<=n;j++)
		{
			now=h[j];
			for(int k=j;k<=n;k++)
			{
				now=min(now,h[k]);
				tot+=now;
			}
		}
	}
	cout<<tot<<"\n";
	return 0;
}
 
posted @ 2023-01-20 18:20  PKU_IMCOMING  阅读(14)  评论(0)    收藏  举报