Run Time: 0.016
Ranking (as of 2016-02-20): 5 out of 195
Language: C++
/* UVa 736 - Lost in Space To build using Visual Studio 2012: cl -EHsc -O2 UVa_736_Lost_in_Space.cpp */ #include <cstdio> const int nr_dirs = 8, N_max = 50; const struct dir { const char* s_; int r_, c_; } dirs[nr_dirs] = { {"N", -1, 0}, {"NE", -1, 1}, {"E", 0, 1}, {"SE", 1, 1}, {"S", 1, 0}, {"SW", 1, -1}, {"W", 0, -1}, {"NW", -1, -1} }; bool appear(int N, const char strings[N_max][N_max + 1], const char s[N_max + 1], int r, int c, int dr, int dc) { for (int i = 1; s[i]; i++) { do { r += dr, c += dc; if (r < 0 || r >= N || c < 0 || c >= N) return false; } while (strings[r][c] == ' '); if (strings[r][c] != s[i]) return false; } return true; } int main() { int ds; scanf("%d", &ds); while (ds--) { int N; scanf("%d", &N); getchar(); char strings[N_max][N_max + 1]; for (int r = 0; r < N; r++) gets(strings[r]); while (true) { char s[N_max + 1]; if (!gets(s) || !s[0]) break; printf("\n%s\n", s); bool found = false; for (int r = 0; r < N; r++) for (int c = 0; c < N; c++) if (strings[r][c] == s[0]) for (int d = 0; d < nr_dirs; d++) if (appear(N, strings, s, r, c, dirs[d].r_, dirs[d].c_)) { found = true; printf("(%d,%d) - %s\n", r + 1, c + 1, dirs[d].s_); } if (!found) puts("not found"); } if (ds) putchar('\n'); } return 0; }
No comments:
Post a Comment