mayoko’s diary

プロコンとかいろいろ。

SRM 651 div1 easy: RobotOnMoon

ただの引掛け問題なのでソースコード貼るだけ。

struct P{
    int y;
    int x;
    P() {}
    P(int y, int x) : y(y), x(x) {}
};

class RobotOnMoon {
public:
    int longestSafeCommand(vector <string> board) {
        int n = board.size(), m = board[0].size();
        P start;
        for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) {
            if (board[i][j] == 'S') {
                start = P(i, j);
            }
        }
        int ok = 0;
        int ret = 0;
        // left
        for (int i = 0; i < start.x; i++) {
            if (board[start.y][i] == '#') ok |= 1;
        }
        ret += start.x;
        // right
        for (int i = start.x+1; i < m; i++) {
            if (board[start.y][i] == '#') ok |= 1<<1;
        }
        ret += m-start.x-1;
        // up
        for (int i = 0; i < start.y; i++) {
            if (board[i][start.x] == '#') ok |= 1<<2;
        }
        ret += start.y;
        // down
        for (int i = start.y; i < n; i++) {
            if (board[i][start.x] == '#') ok |= 1<<3;
        }
        ret += n-start.y-1;
        if (ok != 0) return -1;
        return ret;
    }
};