简单思维题,想得到秒A,想不到打死算不出
可以想到,在本题中:
能从任意点到达任意点,等价于能从最外围的一圈(第0,n-1列和第0,m-1行)上的任意点到达最外围一圈上的任意点
说明:
如果想去(i, j)只需要先移动到(i, 0)或(i, n-1),然后纵向到达(i, j)
或是先移动到(0, j)或(m-1, j)然后横向到达
同样,想从(i, j)出发到任意点,只需要先到(i, 0)(i, n-1)(0, j)(m-1, j)这四个点其中之一,然后重复上面的步骤即可
题目显然保证对于任意一点都一定会有向上或向下,向左或向右的一个路径存在,所以上述方法是成立的
然后想要在最外围一圈的任意点到达任意点,就必须满足4个角落上的点一定不能是“死路”,所以最外围一圈的前进方向必须是顺时针或逆时针,即:
s[0] == t[0] && s[n-1] == t[m-1] && s[0] != s[n-1]
#include<bits/stdc++.h> using namespace std; const int maxn = 1e5 + 5; char s[maxn], t[maxn]; int main() { int T; cin>>T; while(T--) { int n, m; cin>>n>>m; cin>>s>>t; if(s[0] == t[0] && s[n-1] == t[m-1] && s[0] != s[n-1]) cout<<"Happy"<<endl; else cout<<"Sad"<<endl; } return 0; }