#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue>
using namespace std;
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
struct point{
int x,y;
};
bool cmp(point a,point b)
{
if(a.x==b.x) return a.y<b.y;
return a.x<b.x;
}
struct node{
point s[5];
int dis;
int dir;
};
void copy(node a,node &b)
{
b.dir=a.dir;
b.dis=a.dis;
for(int i=1; i<5; i++)
{
b.s[i].x=a.s[i].x;
b.s[i].y=a.s[i].y;
}
}
queue<node>s;
char vis[8][8][8][8][8][8][8][8];
bool check(node a,node b)
{
for(int i=1; i<5; i++)
{
if(a.s[i].x!=b.s[i].x) return false;
if(a.s[i].y!=b.s[i].y) return false;
}
return true;
}
bool checkcf(int xx,int yy,node a)
{
for(int i=1; i<5; i++)
if(a.s[i].x==xx&&a.s[i].y==yy) return false;
return true;
}
int bj(node a)
{
if(vis[a.s[1].x][a.s[1].y][a.s[2].x][a.s[2].y][a.s[3].x][a.s[3].y][a.s[4].x][a.s[4].y]==0)
{
vis[a.s[1].x][a.s[1].y][a.s[2].x][a.s[2].y][a.s[3].x][a.s[3].y][a.s[4].x][a.s[4].y]=a.dir;
return 0;
}
return vis[a.s[1].x][a.s[1].y][a.s[2].x][a.s[2].y][a.s[3].x][a.s[3].y][a.s[4].x][a.s[4].y];
}
void bfs(node a,node b)
{
if(check(a,b))
{
cout<<"YES"<<endl;
return;
}
while(!s.empty())
{
node cur=s.front();
s.pop();
if(cur.dis==4){
cout<<"NO"<<endl;
return;
}
for(int i=1; i<5; i++)
for(int j=0; j<4; j++)
{
int xx=cur.s[i].x+dx[j];
int yy=cur.s[i].y+dy[j];
if(!checkcf(xx,yy,cur))//不能走,就只能跳
xx+=dx[j],yy+=dy[j];
if(xx<0||xx>7||yy<0||yy>7) continue;
if(checkcf(xx,yy,cur))//检测能否走或者跳
{
node nw;
copy(cur,nw);
nw.s[i].x=xx;
nw.s[i].y=yy;
nw.dis=cur.dis+1;
nw.dir=cur.dir;
sort(nw.s+1,nw.s+5,cmp);
if(bj(nw)==0)
s.push(nw);
else if(bj(nw)==cur.dir) continue;
else{
cout<<"YES"<<endl;
return;
}
}
}
}
}
void init()
{
while(!s.empty()) s.pop();
memset(vis,0,sizeof(vis));
}
int main()
{
freopen("cheer.in","r",stdin);
freopen("cheer.out","w",stdout);
node a;
while(scanf("%d%d",&a.s[1].x,&a.s[1].y)!=EOF)
{
init();
a.s[1].x--,a.s[1].y--;
for(int i=2; i<5; i++) cin>>a.s[i].x>>a.s[i].y,a.s[i].x--,a.s[i].y--;
a.dis=0;
a.dir=1;
sort(a.s+1,a.s+5,cmp);
s.push(a);bj(a);
node b;
b.dis=0;
b.dir=2;
for(int i=1; i<5; i++) cin>>b.s[i].x>>b.s[i].y,b.s[i].x--,b.s[i].y--;
sort(b.s+1,b.s+5,cmp);
s.push(b);bj(b);
bfs(a,b);
}
return 0;
}
Online Judge Footer