Codeforces828 B. Black Square
1 second
256 megabytes
standard input
standard output
Polycarp has a checkered sheet of paper of size n × m. Polycarp painted some of cells with black, the others remained white. Inspired by Malevich's "Black Square", Polycarp wants to paint minimum possible number of white cells with black so that all black cells form a square.
You are to determine the minimum possible number of cells needed to be painted black so that the black cells form a black square with sides parallel to the painting's sides. All the cells that do not belong to the square should be white. The square's side should have positive length.
The first line contains two integers n and m (1 ≤ n, m ≤ 100) — the sizes of the sheet.
The next n lines contain m letters 'B' or 'W' each — the description of initial cells' colors. If a letter is 'B', then the corresponding cell is painted black, otherwise it is painted white.
Print the minimum number of cells needed to be painted black so that the black cells form a black square with sides parallel to the painting's sides. All the cells that do not belong to the square should be white. If it is impossible, print -1.
5 4
WWWW
WWWB
WWWB
WWBB
WWWW
5
1 2
BB
-1
3 3
WWW
WWW
WWW
1
In the first example it is needed to paint 5 cells — (2, 2), (2, 3), (3, 2), (3, 3) and (4, 2). Then there will be a square with side equal to three, and the upper left corner in (2, 2).
In the second example all the cells are painted black and form a rectangle, so it's impossible to get a square.
In the third example all cells are colored white, so it's sufficient to color any cell black.
—————————————————————————————————
题目的意思是给出一张黑白的图,问把一些白色的点染成黑色使得所有黑色的点在一个正方形内,问最少染多少的白色点
思路:直接记录黑色点行和列的最大最小值,这样就能算出正方形最小值,然后判断行列数目是否达到这个正方形
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <vector>
#include <bitset> using namespace std; #define LL long long
const int INF = 0x3f3f3f3f; int m,n;
char mp[200][200];
int main()
{
scanf("%d%d",&m,&n);
int mni=INF,mnj=INF,mxi=-1,mxj=-1;
int cnt=0;
for(int i=0; i<m; i++)
{
scanf("%s",&mp[i]);
for(int j=0;j<n;j++)
{
if(mp[i][j]=='B')
{
mni=min(mni,i);
mnj=min(mnj,j);
mxi=max(mxi,i);
mxj=max(mxj,j);
cnt++;
}
}
}
if(mni==INF&&mnj==INF&&mxi==-1&&mxj==-1)
printf("1\n");
else if(mxi-mni>=mxj-mnj)
{
if(n<mxi-mni+1)
printf("-1\n");
else
printf("%d\n",(mxi-mni+1)*(mxi-mni+1)-cnt);
}
else
{
if(m<mxj-mnj+1)
printf("-1\n");
else
printf("%d\n",(mxj-mnj+1)*(mxj-mnj+1)-cnt);
}
return 0;
}
最新文章
- [C]遍历目录下所有文件
- 4. Prototype(原型)
- Asp.Net Form验证不通过,重复登录
- c# base64 编码解码
- Shell数组的增删改查
- lintcode:最大间隔
- HDU 5387 Clock
- Qt编译postgreSQL驱动
- (Excel导出失败)检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失
- JDK PATH 和 CLASSPATH环境变量的作用及其配置
- ios 多线程开发(二)线程管理
- 【二分图】P3386洛谷模板
- MongoDB中文档操作(二)
- java8新特征
- 如何建立nfs网络文件系统
- bootgrid修改成可以全勾选和全取消勾选操作
- 图像控件 ImageControl
- 原生ajax的请求封装get和post
- 【Linux】【Maven】Linux下安装和配置Maven
- iis支持asp.net4.0的注册命令使用方法