六之星

六之星

Time Limit:1000MS  Memory Limit:65536K
Total Submit:217 Accepted:43

Description

Tom每当寂寞的时候就会看天上的星星,有一天他突然想天上的星星是否会有六个星星在一条直线上。To simple the problem,我们把蓝天作为一个n行m列的格子。每个格子里有星星就用“*”表示,没有用“^“表示。你能计算出有六个连续的星星在一条直线上吗?

Input

首先输入一个整数t,表示有t组例子;
每组例子有两部分组成。
第一部分:两个整数 n ,m(0<=n,m<=20)占一行;
第二部分:n行m列个(^,*)组成的蓝天;

Output

输出包括t行,每行对应例子的结果。如果有六之星输出”yes”,否则输出“no”.(每一行或者每一列,每一斜线有连续的六个星为yes)

Sample Input

2
6 6
^^^^^^
*^*^^^
**^*^^
**^^^^
*^^^^^
^^**^^
7 6
*^*^^^
^*^*^^
^^*^^^
^^^*^^
^^^^*^
**^^^*
***^^^

 

Sample Output

no 
yes

 

Source

xml

#include<stdio.h>
char a[22][22];
int n,m;
bool flag;
int dir[4][2]={{1,1},{1,0},{0,1},{-1,1}};
void find(int x,int y)
{
	int i,j;
	for(i=0;i<4;i++)
	{
		if(x+dir[i][0]*5>=n||x+dir[i][0]*5<0||y+dir[i][1]*5>=m||y+dir[i][1]*5<0) continue;
		for(j=5;j>0;j--)
			if(a[x+dir[i][0]*j][y+dir[i][1]*j]!='*') break;
		if(j==6) { flag=1; break;}
	}
	return ;
}
int main()
{
	int t,i,j;
	scanf("%d",&t);
	while(t--){
		scanf("%d%d",&n,&m);
		getchar();
		for(i=0;i<n;i++)			
			gets(a[i]);
		flag=0;
		for(i=0;i<n;i++){
			for(j=0;j<m;j++){
				if(a[i][j]=='*'){
					find(i,j);
					if(flag) break;
				}
			}
			if(flag) break;
		}
		if(flag) printf("yes/n");
		else	 printf("no/n");
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值