89 求助玄关
查看原帖
89 求助玄关
768951
_Chronostatis_楼主2024/4/15 21:00

rt.
WA 在点 4,本机测试(第 4 个点的数据)对的,交上去错了。
记录。
代码:

#include <bits/stdc++.h>

using namespace std;

char m[12][12];
int f[3], c[3], ans;
bool zt[160005];

void M(int x, int y, int mi, bool h) {
	if (mi == 0) {
		if (m[x - 1][y] == '*') {
      !h ? f[0] = 1 : c[0] = 1;
    } else {
      !h ? f[1]-- : c[1]--;
    }
	} else if (mi == 1) {
		if (m[x][y + 1] == '*') {
      if (h == 0) {
        f[0] = 2;
      } else {
        c[0] = 2;
      }
    } else {
      !h ? f[2]++ : c[2]++;
    }
	} else if (mi == 2) {
		if (m[x + 1][y] == '*') {
      if (h == 0) {
        f[0] = 3;
      } else {
        c[0] = 3;
      }
    } else {
      !h ? f[1]++ : c[1]++;
    }
	} else {
		if (m[x][y - 1] == '*') {
      if (h == 0) {
        f[0] = 0;
      } else {
        c[0] = 0;
      }
    } else {
      !h ? f[2]-- : c[2]--;
    }
	}
}

int main() {
	for (int i = 0; i <= 11; i++) {
    m[i][0] = '*';
    m[i][11] = '*';
  }
	for (int i = 1; i <= 11; i++) {
    m[0][i] = '*';
    m[11][i] = '*';
  }
  for (int i = 1; i <= 10; i++) {
  	for (int j = 1; j <= 10; j++) {
   		cin >> m[i][j];
   		if (m[i][j] == 'F') {
        f[1] = i, f[2] = j;
      }
   		if (m[i][j] == 'C') {
        c[1] = i, c[2] = j;
      }
		}
	}
	while (f[1] != c[1] || f[2] != c[2]) {
		int tmp = f[1] + f[2] * 10 + c[1] * 100 + c[2] * 1000 + f[0] * 10000 + c[0] * 40000;
		if (zt[tmp]) {
			cout << 0;
			return 0;
		}
		zt[tmp] = 1;
		M(f[1], f[2], f[0], 0);
		M(c[1], c[2], c[0], 1);
		ans++;
	}
	cout << ans;
    return 0;
}
2024/4/15 21:00
加载中...