Hey guys I just tried the Anton and Chess problem , hope you might like my solution feel free to comment better solution .
#include
#include
typedef unsigned u;
u F(u a,u b){return(b>=a)+(b>a);}
char C[3][3],c[3];u D[3][3];
int main()
{
u q,x,y,a,b,dx,dy,dz,i,j;
for(i=-1;++i<3;)for(j=-1;++j<3;)D[i][j]=-1u;
scanf("%u%u%u",&q,&x,&y);
x^=(1u<<31);y^=(1u<<31);
while(q--)
{
scanf("%s%u%u",c,&a,&b);
a^=(1u<<31);b^=(1u<<31);
dx=a>x?a-x:x-a;
dy=b>y?b-y:y-b;
if(dx!=0&&dy!=0&&dx!=dy)continue;
dz=dx>dy?dx:dy;
if(D[F(x,a)][F(y,b)]>dz)
{
D[F(x,a)][F(y,b)]=dz;
C[F(x,a)][F(y,b)]=*c;
}
}
for(i=-1;++i<3;)for(j=-1;++j<3;)if(C[i][j])
{
if( ((i^j)&1)&&(C[i][j]=='R'||C[i][j]=='Q'))q=0;
if(!((i^j)&1)&&(C[i][j]=='B'||C[i][j]=='Q'))q=0;
}
printf(q?"NO\n":"YES\n");
return 0;
}