题解 CF1332A 【Exercising Walk】

rui_er

2020-04-03 10:26:12

Solution

这题大概就是把不行的条件判掉,剩下的都是可以的。 首先,因为 $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; } ```