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;
}
此生无悔入OI 来生AK IOI

浙公网安备 33010602011771号