六之星
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; }