赞
踩
思路就是找规律
可以发现,当拐点在角落时的情况和不在角落的情况是不同
当拐点在角落时,只有目标点的横纵坐标其中的一个和它相同时,这时才可能到达。
否则,我们就简单的例子可以看一下,当一个
2
∗
2
2*2
2∗2的矩阵的剩余的那个点(题中给了3点个坐标,确定的正方形的那个),当其他点的横纵坐标与该点的横纵坐标的差值都使偶数的时候是不可达的,其余的点都是可达的。
#include <bits/stdc++.h> #define int long long #define rep(i, a, b) for(int i = (a); i <= (b); ++i) #define fep(i, a, b) for(int i = (a); i >= (b); --i) #define _for(i, a, b) for(int i=(a); i<(b); ++i) #define pii pair<int, int> #define pdd pair<double,double> #define ll long long #define db double #define endl '\n' #define x first #define y second #define pb push_back #define vi vector<int> using namespace std; const int maxn = 2e5 + 10; int x[4],y[4]; void solve() { int n; cin>>n; map<int,int>sx,sy; rep(i,1,3){ cin>>x[i]>>y[i]; sx[x[i]]++; sy[y[i]]++; } int xx,yy,nx,ny; rep(i,1,3){ if(sx[x[i]]==2) xx=x[i]; if(sy[y[i]]==2) yy=y[i]; if(sx[x[i]] == 1) nx = x[i]; if(sy[y[i]] == 1) ny = y[i]; } int ex,ey; cin>>ex>>ey; int dx=abs(ex-nx); int dy=abs(ey-ny); if((xx==1||xx==n)&&(yy==1||yy==n)){ if(ex==xx||ey==yy){ cout<<"YES\n"; }else{ cout<<"NO\n"; } return; }else{ if(dx%2==0&&dy%2==0){ cout<<"NO\n"; }else{ cout<<"YES\n"; } } } signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); // freopen("C:\\Users\\24283\\CLionProjects\\untitled2\\1.in", "r", stdin); int _; cin >> _; while (_--) solve(); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。