#include<cstdio> #include<queue> usingnamespacestd; int n, k, l; int board[101][101]; int dx[4] = { -1, 1, 0, 0 }; int dy[4] = { 0, 0, -1, 1 }; int d_left[4] = { 2, 3, 1, 0 }; // 'L' int d_right[4] = { 3, 2, 0, 1 }; // 'D' queue<pair<int, char> > direction; boolisWall(int x, int y){ // 벽이면 true if (x < 1 || y < 1 || x > n || y > n) returntrue; returnfalse; } boolisBound(int x, int y){ if (x > 0 && y > 0 && x <= n && y <= n) returntrue; returnfalse; } intgame(){ int x = 1; int y = 1; // 시작위치 int dir = 3; // 시작방향: 오른쪽 int len = 1; // 뱀의 길이 int time = 0; // 게임 시작 시간 board[x][y] = 1; while (true) { int convert = 0; if (!direction.empty()) { convert = direction.front().first; } time++; // 현재 방향에 맞는 한 칸 이동 int d_x = x + dx[dir]; int d_y = y + dy[dir]; // 벽인지 자신의 몸인지 확인 if (isWall(d_x, d_y) || board[d_x][d_y] > 0) return time; // 방향 전환 시간인지 확인 if (time == convert) { if (direction.front().second == 'D') { dir = d_right[dir]; } else { dir = d_left[dir]; } direction.pop(); } // 사과 있는지 확인 if (board[d_x][d_y] == -1) { board[d_x][d_y] = ++len; x = d_x; y = d_y; continue; } // 이동 int tmp_x = x, tmp_y = y; for (int i = 1; i < len; ++i) { for (int j = 0; j < 4; ++j) { int d_tmp_x = tmp_x + dx[j]; int d_tmp_y = tmp_y + dy[j]; if (isBound(d_tmp_x, d_tmp_y)) { if (board[d_tmp_x][d_tmp_y] == board[tmp_x][tmp_y] - 1) { board[tmp_x][tmp_y] = board[d_tmp_x][d_tmp_y]; tmp_x = d_tmp_x; tmp_y = d_tmp_y; break; } } } } board[d_x][d_y] = len; board[tmp_x][tmp_y] = 0; x = d_x; y = d_y; } } intmain(){ scanf("%d %d", &n, &k); for (int i = 0; i < k; ++i) { int r, c; scanf("%d %d", &r, &c); board[r][c] = -1; } scanf("%d", &l); for (int i = 0; i < l; ++i) { int x; char dir; scanf("%d %c", &x, &dir); direction.push({ x, dir }); } printf("%d\n", game()); return0; }