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; } };