Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
贴代码。。求救。。一直WA#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct trie{ bool match; int index; trie *next[26]; }root, tree[100000]; int ns, cnt; char str[11010][50], word[50], ans[11010]; int l; void insert(char s[]){ trie *temp = &root; for (int j = 0; j < strlen(s); j++){ if (temp->next[s[j]-'a'] == NULL){ for (int i = 0; i < 26; i++) tree[ns].next[i] = NULL; tree[ns].index = 0; tree[ns].match = false; temp->next[s[j]-'a'] = &tree[ns++]; } temp = temp->next[s[j]-'a']; } temp->match = true; temp->index = l; } int search(char s[]){ trie *temp = &root; for (int i = 0; i < strlen(s); i++){ if (temp->next[s[i]-'a'] == NULL) return -1; temp = temp->next[s[i]-'a']; } if (temp->match)return temp->index; else return -1; } void add(char *s){ char temp[50]; for (int i = 0; i <= strlen(s); i++){ for (int q = 'a'; q <= 'z'; q++){ if (q == s[i])continue; for (int j = 0; j < i; j++) temp[j] = s[j]; temp[i] = q; for (int k = i; k < strlen(s); k++) temp[k+1] = s[k]; temp[strlen(s)+1] = '\0'; int t = search(temp); if (t >= 0){ ans[cnt++] = t; } } } } void del(char *s){ char temp[50]; for (int i = 0; i < strlen(s); i++){ for (int j = 0; j < i; j++) temp[j] = s[j]; for (int k = i+1; k < strlen(s); k++) temp[k-1] = s[k]; temp[strlen(s)-1] = '\0'; int t = search(temp); if (t >= 0){ ans[cnt++] = t; } } } void change(char *s){ char temp[50]; strcpy(temp, s); for (int i = 0; i < strlen(temp); i++){ for (int q = 'a'; q <= 'z'; q++){ if (q == s[i])continue; temp[i] = q; int t = search(temp); if (t >= 0){ ans[cnt++] = t; } temp[i] = s[i]; } } } int main(){ while (scanf("%s", str[l])){ if (!strcmp(str[l],"#"))break; insert(str[l]); l++; } while (scanf("%s", word)){ if (!strcmp(word, "#"))break; if (search(word) >= 0){ printf("%s is correct\n", word); continue; } add(word); del(word); change(word); if (cnt){ printf("%s: ", word); sort(ans, ans+cnt); for (int i = 0; i < cnt-1; i++) if (ans[i]!=ans[i+1]) printf("%s ", str[ans[i]]); printf("%s\n", str[ans[cnt-1]]); cnt = 0; memset(ans, 0, sizeof(ans)); } else{ printf("%s:\n", word); cnt = 0; memset(ans, 0, sizeof(ans)); } } system("pause"); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator