MnZn求助简单模拟
查看原帖
MnZn求助简单模拟
676634
Albert_Wei楼主2023/7/20 15:56
#include <bits/stdc++.h>
#define int long long
using namespace std;

signed main() {
  int tt;
  cin >> tt;
  while (tt--) {
  	string d;
  	int n, m, i1, j1, i2, j2;
  	cin >> n >> m >> i1 >> j1 >> i2 >> j2 >> d;
  	map<string, int> mp;
  	mp["DL"] = 0, mp["DR"] = 1, mp["UL"] = 0, mp["UR"] = 1; 
  	vector<vector<vector<bool> > > vis(n, vector<vector<bool> > (m, vector<bool> (4, 0)));
	n--, m--, i2--, j2--;
  	int x = i1 - 1, y = j1 - 1;
  	int ans = -1, cnt = 0;
  	while (true) {
  	  if (vis[x][y][mp[d]]) break;
  	  vis[x][y][mp[d]] = true;
  	  if (d == "DL") {
        int tmp = min(n - x, y);
        if (i2 - x == y - j2 && i2 >= x) {
          ans = cnt;
          break;
        }
  	  	x += tmp, y -= tmp;
  	  	if (x == n) d[0] = 'U';
        if (y == 0) d[1] = 'R';
	  } else if (d == "DR") {
        int tmp = min(n - x, m - y);
        if (i2 - x == j2 - y && i2 >= x) {
          ans = cnt;
          break;
        }
  	  	x += tmp, y += tmp;
  	  	if (x == n) d[0] = 'U';
        if (y == m) d[1] = 'L';
	  } else if (d == "UL") {
        int tmp = min(x, y);
        if (x - i2 == y - j2 && i2 <= x) {
          ans = cnt;
          break;
        }
	  	x -= tmp, y -= tmp;
  	  	if (x == 0) d[0] = 'D';
        if (y == 0) d[1] = 'R';
	  } else if (d == "UR") {
        int tmp = min(x, m - y);
        if (x - i2 == j2 - y && i2 <= x) {
          ans = cnt;
          break;
        }
	  	x -= tmp, y += tmp;
  	  	if (x == 0) d[0] = 'D';
        if (y == m) d[1] = 'L';
	  }
      cnt++;
	}
	cout << ans << endl;
  }
  return 0;
} 

2023/7/20 15:56
加载中...