#include <iostream>
#include <fstream>
#include <string>
using namespace std;
char dict[10005][16];
char word[51][16];
int count1=0,count2=0;
bool Replace(char *d,char *w)
{
int i;
bool flag=false;
for(i=0; i<strlen(w); i++)
{
if(d[i]!=w[i] && flag==false) //不相等
{
flag=true; //标志已经交换
continue;
}
if(flag && d[i]!=w[i])
{
return false;
}
}
return true;
}
bool Delete(char *d,char *w)
{
int i,k=0;
int len=strlen(w);
bool flag=false;
for(i=0; i<len; i++)
{
if(d[i-k]==w[i])
continue;
else if(d[i-k]!=w[i] && !flag) //第一次遇到不相等 删除
{
k=1;
flag=true;
}
else if(d[i-k]!=w[i] && flag) //再次遇到不相等
{
return false;
}
}
return true;
}
bool Insert(char *d,char *w)
{
int i,k=0;
int len=strlen(d);
bool flag=false;
int fail=0;
for(i=0; i<len; i++)
{
if(d[i]==w[i-k])
{
continue;
}
else
{
if(flag==true) //已经替换了一次 不匹配 直接退出
{
return false;
}
else //还没替换过
{
k=1;
flag=true; //模拟替换
}
}
}
return true;
}
int main()
{
freopen("acm.txt","r",stdin);
int i,j,k;
int point;
int address[10005];
bool flag;
//输入
while(scanf("%s",dict[count1])!=EOF && dict[count1][0]!='#')
{
count1++;
getchar();
}
getchar();
while(scanf("%s",word[count2])!=EOF && word[count2][0]!='#')
{
count2++;
getchar();
}
for(i=0; i<count2; i++)
{
point=0;
flag=false;
for(j=0; j<count1; j++)
{
if(strcmp(word[i],dict[j])==0) //相等
{
flag=true;
break;
}
if(strlen(word[i])==strlen(dict[j]))
{
if( Replace(dict[j],word[i]) )
{
address[point++]=j;
}
}
if(strlen(word[i])-strlen(dict[j])==1) //删除
{
if( Delete(dict[j],word[i]) )
{
address[point++]=j;
}
}
if(strlen(word[i])-strlen(dict[j])==-1) //插入
{
if( Insert(dict[j],word[i]) )
{
address[point++]=j;
}
}
}//for
//输出
if(flag)
{
printf("%s is correct",word[i]);
}
else
{
printf("%s:",word[i]);
for(k=0; k<point; k++)
{
printf(" %s",dict[ address[k] ]);
}
}
printf("\n");
}//for
return 0;
}
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 13024 | Accepted: 4806 |
Description
Input
Output
Sample Input
i is has have be my more contest me too if award # me aware m contest hav oo or i fi mre #
Sample Output
me is correct aware: award m: i my me contest is correct hav: has have oo: too or: i is correct fi: i mre: more me
一开始的时候,我都把结果分开来输出,运行出来后结果很乱。发现这样可不行。于是,把所有的都统一起来,再用一个address[]数组来标记符合条件的字典里的字符,然后最后分开输出。非常好!AC。没什么难度。