题目链接:
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1997
又是一个神奇的布尔矩阵
Time Limit: 1000 MS Memory Limit: 32768 K
Total Submit: 211(110 users) Total Accepted: 116(105 users) Rating: Special Judge: No
Description
这又是一个0,1的布尔矩阵,但这一次的要求大有不同,首先我会给出一个n*m的矩阵,这个矩阵要满足下面这两个条件才是一个完美的矩阵:
1.这个矩阵中0和1要同时存在
2.该矩阵中不能存在两个0相连的的情况(相连即同行或同列并相邻,对角相连不算这种情况)
你的任务就是判断所给出的矩阵是否为完美矩阵
Input
本题有多组测试数据,每组数据第一行输入两个数n,m,表示一个n*m的矩阵的行数和列数(1
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[105][105],n,m,b[2];
int dir[4][2]={{0,1},{1,0},{-1,0},{0,-1}};
int judge(int x,int y)
{
for(int i=0;i<4;i++)
{
if(a[x+dir[i][0]][y+dir[i][1]]==a[x][y])
{
return 0;
}
}
return 1;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
scanf("%d",&a[i][j]);
}
}
for(int i=0; i<=m; i++)
{
a[0][i]=2;
a[n+1][i]=2;
}
for(int i=0; i<=n; i++)
{
a[i][0]=2;
a[i][m+1]=2;
}
memset(b,0,sizeof(b));
int flag=1;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
b[a[i][j]]++;
if(a[i][j]==0)
{
if(judge(i,j)==0)
{
flag=0;
}
}
}
}
if(flag==0||b[0]==0||b[1]==0)
{
printf("terrible\n");
}
else
{
printf("perfect\n");
}
}
return 0;
}