zoukankan      html  css  js  c++  java
  • 洛谷 P1191 矩形 题解

    P1191 矩形

    题目描述

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

    输入格式

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

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

    输出格式

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

    输入输出样例

    输入 #1

    4
    WWBW
    BBWB
    WBWW
    WBWB

    输出 #1

    15

    说明/提示

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

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

    【思路】

    暴力?
    输入数据,
    同时记录没一点从他开始到上面一共有多少个连续的白点
    然后再枚举一遍矩阵
    每一个点都求出附近能够组成的矩阵的数量
    累加起来
    怎么求能够成矩阵的数量呢?
    枚举这个矩阵的长
    然后宽是长覆盖的范围里面最矮的那个
    用长*宽就是目前矩阵的长能够包含的矩阵的数量
    输出和就好了

    【完整代码】

    #include<iostream>
    #include<cstdio>
    
    using namespace std;
    const int Max = 1005;
    int f[Max][Max];
    int main()
    {
    	char c;
    	int n;
    	cin >> n;
    	for(register int i = 1;i <= n;++ i)
    	{
    		for(register int j = 1;j <= n;++ j)
    		{
    			cin >> c;
    			if(c == 'B')f[i][j] = 0;
    			else
    			f[i][j] = f[i - 1][j] + 1;
    		}
    	}
    	int ans = 0;
    	for(register int i = 1;i <= n;++ i)
    	{
    		for(register int j = 1;j <= n;++ j)
    		{
    			int M = f[i][j];
    			for(register int l = j,r = j;l >= 1,r <= n;++ l,++ r)
    			{
    				M = min(M,min(f[i][l],f[i][r]));
    				ans += (r - l + 1) * M;
    			}
    		}
    	}
    	cout << ans << endl;
    	return 0;
    } 
    
  • 相关阅读:
    宏 定 义 编 译 出 错
    SSWR 跟 进一法除法
    显示文件后缀扩展名
    基于MPLAB X IDE配置位设置讲解
    mplab xIde 编译成功,但不能生成Hex文件
    InputStream 、 InputStreamReader 、 BufferedReader
    MPLAB® XC C编译器的Workstation License的获取及安装方法
    MPLAB设置路径
    js中的cookie及封装
    nodejs中使用node-sass
  • 原文地址:https://www.cnblogs.com/acioi/p/11650416.html
Copyright © 2011-2022 走看看