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 |
pku2934 why wrong answerIn Reply To:可以在随便一个位置上添加、减少或改变随便一个字符 Posted by:gaminerie at 2006-08-06 17:18:43 #include<stdio.h> #include<string.h> #include<stdlib.h> char word[10005][30]; int N,len[10005]; /* int sort(const void *a,const void *b) { char *x,*y; x=(char *)a; y=(char *)b; return strcmp(x,y); } int find(char *st) { int i,k,x,x1,x2; x1=1; x2=N; while(x1<=x2) { x=(x1+x2)/2; k=strcmp(st,word[x]); if(k==0) return x; if(k>0) x1=x+1; else x2=x-1; } return 0; } */ int find2(char *st) { int i; for(i=1;i<=N;i++) { if(strcmp(st,word[i])==0) return i; } return 0; } int letterMissing(char *st,char *ch,int k,int L) { int i,j,flag; flag=0; if(k==1)//L>len { flag=0; for(i=0,j=0;i<L;i++) { if(st[i]!=ch[j]&&flag==0) { flag=1; continue; } if(st[i]!=ch[j]) return 0; j++; } return 1; } else if(k==-1) { flag=0; for(i=0,j=0;i<L;j++) { if(st[i]!=ch[j]&&flag==0) { flag=1; continue; } if(st[i]!=ch[j]) return 0; i++; } return 1; } return 1; } int letterWrong(char *st,char *ch,int L) { int i,j,flag; flag=0; for(i=0;i<L;i++) { if(st[i]!=ch[i]&&flag==0) { flag=1; continue; } if(st[i]!=ch[i]) return 0; } return 1; } int orderWrong(char *st,char *ch,int L) { int i,j,flag; flag=0; L--; for(i=0;i<L;i++) { if(st[i]!=ch[i]&&flag==0) { if(st[i+1]==ch[i]&&st[i]==ch[i+1]) { i++; } else return 0; flag=1; continue; } if(st[i]!=ch[i]) return 0; } return 1; } void process(char *st) { int L,i,j,k,flag; L=strlen(st); flag=0; for(i=1;i<=N;i++) { k=L-len[i]; if(k==1||k==-1) { // printf("kkk==%d\n",k); if(letterMissing(st,word[i],k,L)) { flag=1; break; } } else if(k==0) { if(letterWrong(st,word[i],L)) {flag=1; break;} if(orderWrong(st,word[i],L)) {flag=1; break;} } } if(flag) printf("%s is a misspelling of %s\n",st,word[i]); else printf("%s is unknown\n",st); } int main() { int i,j,k,q; char st[30]; scanf("%d",&N); for(i=1;i<=N;i++) scanf("%s",word[i]); // qsort(word+1,N,sizeof(word[1]),sort); for(i=1;i<=N;i++) len[i]=strlen(word[i]); scanf("%d",&q); while(q--) { scanf("%s",st); if(find2(st)) { printf("%s is correct\n",st); continue; } process(st); } return 0; } /*Sample Input 11 this is a dictionary that we will use for us letter 60 su as the dictonary us willl Sample Output su is a misspelling of us as is a misspelling of is the is unknown dictonary is a misspelling of dictionary us is correct willl is a misspelling of will */ Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator