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;
}