题解 CF1332A 【Exercising Walk】
rui_er
2020-04-03 10:26:12
这题大概就是把不行的条件判掉,剩下的都是可以的。
首先,因为 $a+b+c+d\geq 1$,所以 $x_1=x_2$ 且 $y_1=y_2$ 的显然不行。
其次,如果一个方向上不能走,即 $x_1=x_2$ 或 $y_1=y_2$,且那个方向要走的步数不为 $0$,这种情况也不行。
然后,因为反方向可以相互抵消(左→右回到原位),可以先把反方向减去它们的最小值,然后判断空间是否足够即可。
完整代码:
```cpp
//By: Luogu@rui_er(122461)
#include <bits/stdc++.h>
using namespace std;
int T;
int a, b, c, d, x, y, x1, y1, x2, y2;
int main()
{
cin>>T;
while(T--)
{
a = b = c = d = x = y = x1 = y1 = x2 = y2 = 0;
cin>>a>>b>>c>>d>>x>>y>>x1>>y1>>x2>>y2;
if(x1 == x2 && y1 == y2)
{
cout<<"No"<<endl;
continue;
}
if(x1 == x2 && (a || b))
{
cout<<"No"<<endl;
continue;
}
if(y1 == y2 && (c || d))
{
cout<<"No"<<endl;
continue;
}
int tmp = min(a, b);
a -= tmp;
b -= tmp;
tmp = min(c, d);
c -= tmp;
d -= tmp;
if(x - x1 < a || x2 - x < b || y - y1 < c || y2 - y < d)
{
cout<<"No"<<endl;
continue;
}
cout<<"Yes"<<endl;
}
return 0;
}
```