Run Time: 0.036
Ranking (as of 2016-01-06): 6 out of 525
Language: C++
/* UVa 671 - Spell checker To build using Visual Studio 2012: cl -EHsc -O2 UVa_671_Spell_checker.cpp */ #include <cstdio> #include <cstring> const int nr_words_max = 10000, nr_chars_max = 15; char words[nr_words_max + 1][nr_chars_max + 1]; int replaceables[nr_words_max]; int correct_or_replaceable(const char* w, const char* s) { while (*w && *s && *w == *s) w++, s++; if (!*w && !*s) return 1; // correct else if (!strcmp(w + 1, s) || !strcmp(w, s + 1) || !strcmp(w + 1, s + 1)) return 0; else return -1; } int main() { int N; scanf("%d", &N); while (N--) { int nr_words = 0; while (true) { scanf("%s", words[nr_words]); if (words[nr_words][0] == '#') break; nr_words++; } while (true) { char s[nr_chars_max + 1]; scanf("%s", s); if (s[0] == '#') break; int correct = -1, nr_replaceables = 0; for (int i = 0; i < nr_words; i++) { int cr = correct_or_replaceable(words[i], s); if (cr == 1) { // correct correct = i; break; } else if (cr == 0) // replaceable replaceables[nr_replaceables++] = i; } if (correct != -1) printf("%s is correct\n", s); else { printf("%s:", s); for (int i = 0; i < nr_replaceables; i++) printf(" %s", words[replaceables[i]]); putchar('\n'); } } if (N) putchar('\n'); } return 0; }
No comments:
Post a Comment