题目大意:给定一个图 ,确定能否通过平移整个图 使得两个一样的图拼接成一个矩形,不能旋转。注意是整个图移动,一开始理解错了`````
思路:很简单的一个水题, 看一下这个图本身是不是矩形就可以,如果时矩形就能拼成矩形,否则不能。
查看图是否为矩形的思路: 遍历一遍,找到边界 最上面的行, 最下面行 最左边列 最右边列 在遍历一遍, 只要在这个范围内 出现了 . 那么就不是矩形。
AC 代码:
#include <iostream>
#include <cstdio>
using namespace std;
char mp[550][550];
int main()
{
int n, m;
while(~scanf("%d%d", &n, &m))
{
for(int i=0; i<n; i++)
scanf("%s", mp[i]);
int ux = 1000, dx = -1;
int lx = 1000, rx = -1;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
if(mp[i][j] == 'X')
{
ux = min(ux, i);
lx = min(lx, j);
dx = max(dx, i);
rx = max(rx, j);
}
int ok = 1;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
if(mp[i][j] != 'X' && i >= ux && i<= dx && j >= lx && j <= rx)
{
ok = 0;
break;
}
if(ok) printf("YES\n");
else printf("NO\n");
}
return 0;
}