CF1003A King Escape


题目传送门

思路:

由于国王可以向斜方向走,那么皇后的斜向障碍就没有用了:

( K 为当前国王的位置, Q 为皇后的控制区域, N 为国王下一步要走的位置, O 为空格)

K Q
Q N

这样子斜着走就可以过去

但是这样子就过不去了:

K Q O
O Q O
O Q N

所以我们可以建立一个坐标系,设皇后的位置为原点,如果国王当前的位置与要去到的位置在同一个 象限 内,就可行(满足以下四种情况中的一个),否则不行(不满足以下四种情况):

  1. 在第一象限内,则:
ax<bx&&ax<cx&&ay>by&&ay>cy
  1. 在第二象限内,则:
ax>bx&&ax>cx&&ay>by&&ay>cy
  1. 在第三象限内,则:
ax<bx&&ax<cx&&ay<by&&ay<cy
  1. 在第四象限内,则:
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;//结束程序
}

文章作者: alex_liu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 alex_liu !
  目录