- const int H = 50 + 1;
- const int W = 50 + 1;
- const int L = (50 + 1) * 50;
- bool vis[H][W][L];
- char g[H][W];
- string M;
- int h, w;
- vector< pair<int, int> > A;
- const int di[] = {0, 0, -1, +1};
- const int dj[] = {-1, +1, 0, 0};
- bool rec(int bi, int bj, int len)
- {
- if (vis[bi][bj][len]) return false;
- int ai = A[len].first;
- int aj = A[len].second;
- if (ai == bi && aj == bj) {
- return vis[bi][bj][len] = false;
- }
- if (len == M.size()) return true;
- vis[bi][bj][len] = true;
- for (int d = 0; d < 4; ++d) {
- int ni = bi + di[d];
- int nj = bj + dj[d];
- if (ni < 0 || nj < 0) continue;
- if (h <= ni || w <= nj) continue;
- if (g[ni][nj] == '#') continue;
- if (ni == ai && nj == aj) continue;
- if (rec(ni, nj, len + 1)) return true;
- }
- return false;
- }
- class GameInDarknessDiv2 {
- public:
- string check(vector <string> field, vector <string> moves)
- {
- h = field.size();
- w = field[0].size();
- for (int i = 0; i < h; ++i) {
- for (int j = 0; j < w; ++j) {
- g[i][j] = field[i][j];
- }
- }
- M = accumulate(moves.begin(), moves.end(), string(""));
- fill(&vis[0][0][0], &vis[H - 1][W - 1][L - 1] + 1, false);
- int ai = 0, aj = 0;
- int bi = 0, bj = 0;
- for (int i = 0; i < h; ++i) {
- for (int j = 0; j < w; ++j) {
- if (g[i][j] == 'B') {
- bi = i;
- bj = j;
- }
- if (g[i][j] == 'A') {
- ai = i;
- aj = j;
- }
- }
- }
- A.clear();
- for (int i = 0; i < M.size(); ++i) {
- if (M[i] == 'U') --ai;
- if (M[i] == 'D') ++ai;
- if (M[i] == 'R') ++aj;
- if (M[i] == 'L') --aj;
- A.push_back(make_pair(ai, aj));
- }
- return rec(bi, bj, 0) ? "Bob wins" : "Alice wins";
- }
8/13/2013
SRM588 Div2 Hard
1000
登録:
コメントの投稿
(
Atom
)
0 件のコメント :
コメントを投稿