Codeforces Round #379 (Div. 2), problem: (D) Anton and Chess Solution in C

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

Leave a Reply

Your email address will not be published. Required fields are marked *