2Y
1TLE于用最长公共子序列处理相似问题
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define N 10010
char map[N][17];
char ask[60];
bool similar(char *map,char *ask){
int i,j;
int len_map=strlen(map),len_ask=strlen(ask);
if(abs(len_map-len_ask)>1)return 0;
int same;
if(len_map>len_ask){
same=0;i=0;
for(j=0;j<len_map;j++)if(map[j]==ask[i]){
i++;
same++;
}
if(same==len_ask)return 1;
return 0;
}
if(len_map<len_ask){
same=0;i=0;
for(j=0;j<len_ask;j++)if(ask[j]==map[i]){
i++;
same++;
}
if(same==len_map)return 1;
return 0;
}
same=0;
for(i=0;i<len_ask;i++)if(ask[i]!=map[i])same++;
if(same>1)return 0;
return 1;
}
int main(){
int Nmap=0;
while(scanf("%s",map[++Nmap])!=EOF){
if(map[Nmap][0]=='#'){
Nmap--;
break;
}
}
while(scanf("%s",ask)!=EOF){
if(ask[0]=='#')break;
int i,flag=0;
for(i=1;i<=Nmap;i++)if(strcmp(map[i],ask)==0)flag=1;
if(flag){ printf("%s is correct\n",ask); continue; }
printf("%s:");
for(i=1;i<=Nmap;i++)if(similar(map[i],ask))printf(" %s",map[i]);
printf("\n");
}
return 0;
}