如果没有黑格子直接输出1
记录当前所有黑格子中列最靠左的minc,最靠右的maxc,行最靠上的minr,最靠下的maxr
如果maxc-minc+1=maxr-minr+1,那么一定能填出正方形,只要拿面积减去black个数即可
如果不等,那答案最小的正方形边长一定是max(maxr-minr+1,maxc-minc+1)
也就是填成长方形以后再补成正方形
看看剩下的行或列够不够补成正方形即可
#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <utility>
#include <map>
#include <stack>
#include <set>
#include <vector>
#include <queue>
#include <deque>
#define x first
#define y second
#define mp make_pair
#define pb push_back
#define LL long long
#define Pair pair<int,int>
#define LOWBIT(x) x & (-x)
using namespace std;
const int INF=0x7ffffff;
int n,m;
char a[101][101];
int main ()
{
int i,j;
scanf("%d%d",&n,&m);
for (i=1;