| ||||||||||
| 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