Exercising Walk
题意
给定一个范围和一个初始坐标,可以往四个方向移动,规定每个方向的移动次数,没有顺序限制,问能不能在不出范围的情况下完成所有移动。
思路
只要不去一步一步模拟应该怎么做都能过,这里利用互补直接将左右和上下的移动抵消掉。
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
int t;
int a,b,c,d;
int x,y;
int x1,x2;
int y1,y2;
int main()
{
cin >> t;
while(t--){
cin >> a >> b >> c >> d;
cin >> x >> y;
cin >> x1 >> y1;
cin >> x2 >> y2;
if(x>x1||x<x2){//判断能否向左右移动
int m = min(a,b);
a -= m;
b -= m;
}
if(y>y1||y<y2){//判断能否向上下移动
int m = min(c,d);
c -= m;
d -= m;
}
//现在水平和垂直方向只剩下单向移动
//判断后输出即可
if(x-x1<a||x2-x<b||y-y1<c||y2-y<d)
cout << "No" << endl;
else
cout << "Yes" << endl;
}
return 0;
}