T547385 贪吃蛇 题解

· · 题解

c++:

#include <bits/stdc++.h>

using namespace std;

int vis[2010][2010], mp[2010][2010], sn[4000010];
int m, p, n, x = 1, y = 1, ti, idx;

int main() {
    scanf("%d %d %d", &m, &p, &n);
    for (int i = 1; i <= m; i++) {
        for (int j = 1; j <= m; j++)
            mp[i][j] = -1;
    }
    while (p--) {
        int w, k, c;
        scanf("%d %d %d", &w, &k, &c);
        mp[w][k] = c;
    }
    vis[x][y] = ++ti;
    sn[++idx] = 0;
    for (int i = 1; i <= n; i++) {
        char s[3];
        scanf("%s", s);
        if (s[0] == 'U') x--;
        else if (s[0] == 'D') x++;
        else if (s[0] == 'L') y--;
        else if (s[0] == 'R') y++;
        else {
            int w, k;
            scanf("%d %d", &w, &k);
            if (!vis[w][k]) printf("-1\n");
            else {
                if (idx - ti + vis[w][k] > 0) printf("%d\n", sn[idx - ti + vis[w][k]]);
                else printf("-1\n");
            }
        }
        if (s[0] != 'Q') vis[x][y] = ++ti;
        if (mp[x][y] != -1) {
            sn[++idx] = mp[x][y];
            mp[x][y] = -1;
        }
    }
    return 0;
}