大体题意:
给你一个n*m 的矩阵, 你要用两个同样的图形构造出一个矩形来,问是否可以? .表示 这个地方是空地,X表示是一个小元素!你不可以旋转覆盖, 只能移动整体!
思路:
这个题意一开始理解错了,被hack了,其实移动 只能是整体移动!
因此 只要判断这个图形是否是矩形就可以了!
详细见代码:
#include <bits/stdc++.h>
#define ps push_back
#define fi first
#define se second
#define mr make_pair
using namespace std;
typedef long long ll;
typedef unsigned long long LLU;
const int inf = 0x3f3f3f3f;
const double eps = 1e-10;
const double pi = acos(-1.0);
const int maxn = 1000 + 10;
char s[maxn][maxn];
int main(){
int n, m;
scanf("%d %d",&n, &m);
for (int i = 0; i < n; ++i)scanf("%s",s[i]);
int l = inf,r = -inf,u = inf,d = -inf;
for (int i = 0; i < n; ++i){
for (int j = 0; j < m; ++j){
if (s[i][j] == 'X'){
l = min(l,j);
r= max(r,j);
u = min(u,i);
d = max(d,i);
}
}
}
bool ok = 1;
for (int i = u; i <= d; ++i){
for (int j = l; j <= r; ++j){
if (s[i][j]!='X')ok = 0;
}
}
if (ok)puts("YES");
else puts("NO");
return 0;
}