注意:不要用string, 否则超时超的怀疑人生,当时还以为是cin>>的问题后来发现是string导致的,血一样的教训,不要因为方便用stirng!!
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
char s[10010][70];
char exist[10010][70];
bool cmp1(char *ss1, char * ss2)
{
int sum = 0;
int len = strlen(ss1);
for(int i = 0; i < len; i++)
{
if(ss1[i] != ss2[i])
sum++;
if(sum > 1)
return 0;
}
return 1;
}
bool cmp2(char *ss1, char *ss2)
{
int l1 = 0, l2 = 0;
int sum = 0;
int len =strlen(ss2);
while(l2 < len)
{
if(ss1[l1] != ss2[l2])
{
sum++;
l2++;
}
else
l1++, l2++;
if(sum > 1)
return 0;
}
return 1;
}
int main()
{
char ss[70];
int sum = 0;
while(scanf("%s", s[sum]))
{
if(s[sum][0] == '#')
{
break;
}
sum++;
}
while(scanf("%s", ss) != EOF)
{
if(ss[0] == '#')
break;
bool correct = 0;
bool impossbile = 0;
int len = 0;
for(int i = 0; i < sum; i++)
{
if(strcmp(ss,s[i]) == 0)
{
correct = 1;
break;
}
else if(strlen(ss) == strlen(s[i]))
{
if(cmp1(ss, s[i]))
{
impossbile = 1;
strcpy(exist[len++], s[i]);
}
}
else if(strlen(ss) == strlen(s[i]) - 1)
{
if(cmp2(ss, s[i]))
{
impossbile = 1;
strcpy(exist[len++], s[i]);
}
}
else if(strlen(ss) == strlen(s[i]) + 1)
{
if(cmp2(s[i], ss))
{
impossbile = 1;
strcpy(exist[len++], s[i]);
}
}
}
if(correct == 1)
{
cout << ss << " is correct" << endl;
} else if(impossbile == 1)
{
cout << ss << ":";
for(int i = 0; i < len; i++)
{
cout << " " << exist[i];
}
cout << endl;
} else {
cout << ss << ":" << endl;
}
}
return 0;
}