Language: C++
/* UVa 12478 - Hardest Problem Ever (Easy) To build using Visual Studio 2012: cl -EHsc -O2 UVa_12478_Hardest_Problem_Ever.cpp */ #include <algorithm> #include <cstdio> #include <cstring> using namespace std; const char* names[] = { "RAKIBUL", "ANINDYA", "MOSHIUR", "SHIPLU", "KABIR", "SUNNY", "OBAIDA", "WASI" }; const int nr_rows = 9, nr_columns = 9; const char grid[nr_rows][nr_columns] = { {'O', 'B', 'I', 'D', 'A', 'I', 'B', 'K', 'R'}, {'R', 'K', 'A', 'U', 'L', 'H', 'I', 'S', 'P'}, {'S', 'A', 'D', 'I', 'Y', 'A', 'N', 'N', 'O'}, {'H', 'E', 'I', 'S', 'A', 'W', 'H', 'I', 'A'}, {'I', 'R', 'A', 'K', 'I', 'B', 'U', 'L', 'S'}, {'M', 'F', 'B', 'I', 'N', 'T', 'R', 'N', 'O'}, {'U', 'T', 'O', 'Y', 'Z', 'I', 'F', 'A', 'H'}, {'L', 'E', 'B', 'S', 'Y', 'N', 'U', 'N', 'E'}, {'E', 'M', 'O', 'T', 'I', 'O', 'N', 'A', 'L'} }; #ifdef DEBUG bool search_name(const char* name, int length) { for (int r = 0; r < nr_rows; r++) for (int c = 0; c <= nr_columns - length; c++) { int ci; for (ci = 0; ci < length; ci++) if (name[ci] != grid[r][c + ci]) break; if (ci == length) { printf(" horozontal %d %d: %s\n", r, c, name); return true; } } for (int r = 0; r <= nr_rows - length; r++) for (int c = 0; c < nr_columns; c++) { int ri; for (ri = 0; ri < length; ri++) if (name[ri] != grid[r + ri][c]) break; if (ri == length) { printf(" vertical %d %d: %s\n", r, c, name); return true; } } return false; } #endif int main() { #ifdef DEBUG for (size_t i = 0; i < sizeof(names) / sizeof(const char*); i++) { char name[8]; strcpy(name, names[i]); puts(name); int length = strlen(name); sort(name, name + length); int nr_found = 0; do { if (search_name(name, length)) { if (++nr_found == 2) break; } } while (next_permutation(name, name + length)); /* if (nr_found == 2) { puts(names[i]); break; } */ } #else puts(names[4]); #endif return 0; }
No comments:
Post a Comment