暴力模拟过程即可,建议判断是否形成5个时走dfs计数,当发现斜角或直线有5个后直接结束输入
代码
int al[1001][1001],n,m;
bool check(int x,int y,int z){
int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0;
for(int i=1;x+i<=n;i++){
if(al[x+i][y]==z)
a++;
else
break;
}
for(int i=1;x-i>0;i++){
if(al[x-i][y]==z)
b++;
else
break;
}
if(a+b+1>=5)
return 1;
for(int i=1;y+i<=n;i++){
if(al[x][y+i]==z)
c++;
else
break;
}
for(int i=1;y-i>0;i++){
if(al[x][y-i]==z)
d++;
else
break;
}
if(c+d+1>=5)
return 1;
for(int i=1;(x+i<=n)&&(y+i<=n);i++){
if(al[x+i][y+i]==z)
e++;
else
break;
}
for(int i=1;(x-i>0)&&(y-i>0);i++){
if(al[x-i][y-i]==z)
f++;
else
break;
}
if(e+f+1>=5)
return 1;
for(int i=1;(x+i<=n)&&(y-i>0);i++){
if(al[x+i][y-i]==z)
g++;
else
break;
}
for(int i=1;(x-i>0)||(y+i<=n);i++){
if(al[x-i][y+i]==z)
h++;
else
break;
}
if(h+g+1>=5)
return 1;
return 0;
}
int main(){
memset(al,0,sizeof(al));
scanf("%d%d",&n,&m);
for(int i=1,x,y;i<=m;i++){
scanf("%d%d",&x,&y);
al[x][y]=i%2+1;
if(check(x,y,i%2+1)){
if(i%2){
printf("HtBest %d\n",i);
return 0;
}
else{
printf("WHZ %d\n",i);
return 0;
}
}
}
printf("UNK %d\n",m);
return 0;
}