Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) B. Black Square

题意:问是否可以形成一个全黑正方形

思路:可以找出正方形的边,然后判断下这个矩阵是否容得下,n,m都比边短,比赛的时候写麻烦了,还去找了这个正方形究竟在哪个位置,这样的话得考虑很多情况,不如就边*边-黑子的总数

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int N=2e5+10;
 5 char a[102][102];
 6 int main(){
 7     int n,m;
 8     scanf("%d%d",&n,&m);
 9     for(int i=1;i<=n;i++){
10         scanf("%s",a[i]+1);
11     }
12     int hl=100000,hr=0,ll=100000,lr=0;
13     int xx=0;
14     for(int i=1;i<=n;i++){
15         for(int j=1;j<=m;j++){
16             if(a[i][j]=='B'){
17                 hr=max(hr,j);
18                 hl=min(hl,j);xx++;
19             }
20         }
21     }
22     for(int j=1;j<=m;j++){
23         for(int i=1;i<=n;i++){
24             if(a[i][j]=='B'){
25                 lr=max(lr,i);
26                 ll=min(ll,i);
27             }
28         }
29     }
30     int len=max(hr-hl+1,lr-ll+1);
31     if(xx==0){
32         cout<<1<<endl;return 0;
33     }
34     if(len*len>n*m||len>n||len>m){
35         cout<<-1<<endl;
36     }
37     else cout<<len*len-xx<<endl;
38 
39 }

 

posted on 2017-07-12 22:51  hhhhx  阅读(187)  评论(0编辑  收藏  举报

导航