思路:
由于国王可以向斜方向走,那么皇后的斜向障碍就没有用了:
( K 为当前国王的位置, Q 为皇后的控制区域, N 为国王下一步要走的位置, O 为空格)
| K | Q |
|---|---|
| Q | N |
这样子斜着走就可以过去
但是这样子就过不去了:
| K | Q | O |
|---|---|---|
| O | Q | O |
| O | Q | N |
所以我们可以建立一个坐标系,设皇后的位置为原点,如果国王当前的位置与要去到的位置在同一个 象限 内,就可行(满足以下四种情况中的一个),否则不行(不满足以下四种情况):
- 在第一象限内,则:
ax<bx&&ax<cx&&ay>by&&ay>cy
- 在第二象限内,则:
ax>bx&&ax>cx&&ay>by&&ay>cy
- 在第三象限内,则:
ax<bx&&ax<cx&&ay<by&&ay<cy
- 在第四象限内,则:
ax>bx&&ax>cx&&ay<by&&ay<cy
那就用四个函数去判断这四个条件,有一个为 true 则输出 “ YES “ ;四个都为 false 则输出 “ NO “
代码:
#include<bits/stdc++.h>
using namespace std;
int n,ax,ay,bx,by,cx,cy;
bool check1(){//第一象限
if(ax<bx&&ax<cx&&ay>by&&ay>cy)return true;
else return false;
}
bool check2(){//第二象限
if(ax>bx&&ax>cx&&ay>by&&ay>cy)return true;
else return false;
}
bool check3(){//第三象限
if(ax<bx&&ax<cx&&ay<by&&ay<cy)return true;
else return false;
}
bool check4(){//第四象限
if(ax>bx&&ax>cx&&ay<by&&ay<cy)return true;
else return false;
}
int main(){
cin>>n>>ax>>ay>>bx>>by>>cx>>cy;//输入
if(check1()||check2()||check3()||check4())cout<<"YES"<<endl;//判断
else cout<<"NO"<<endl;
return 0;//结束程序
}