Ranking (as of 2013-01-20): 24
Language: C++
/* UVa 628 - Passwords To build using Visual Studio 2008: cl -EHsc -O2 UVa_628_Passwords.cpp */ #include <cstdio> #include <cstring> using namespace std; const int nr_words_max = 100, nr_word_chars_max = 256; const int nr_rule_chars_max = 256; char words[nr_words_max][nr_word_chars_max]; char password[nr_word_chars_max * nr_rule_chars_max]; void print_password(int ri, int rlength, const char* rule, int wi, int wlength, int pi) { if (ri == rlength) printf("%s\n", password); else if (rule[ri] == '#') { strcpy(password + pi, words[wi]); print_password(ri + 1, rlength, rule, wi, wlength, pi + wlength); } else { for (int i = 0; i < 10; i++) { password[pi] = i + '0'; password[pi + 1] = '\0'; print_password(ri + 1, rlength, rule, wi, wlength, pi + 1); } } } int main() { while (true) { int nr_words; if (scanf("%d\n", &nr_words) == EOF) break; for (int i = 0; i < nr_words; i++) gets(words[i]); int nr_rules; scanf("%d\n", &nr_rules); printf("--\n"); for (int ri = 0; ri < nr_rules; ri++) { char rule[nr_rule_chars_max]; gets(rule); int rlength = strlen(rule); for (int wi = 0; wi < nr_words; wi++) { int wlength = strlen(words[wi]); print_password(0, rlength, rule, wi, wlength, 0); } } } return 0; }
No comments:
Post a Comment