| ||||||||||
| 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 | |||||||||
求大牛们的指教、实在过不了#include <iostream>
#include <cstring>
#include <cstdio>
#include <string.h>
#include <string>
#include <algorithm>
using namespace std;
struct node {
char c[20];
int seq;
}joint[20][2010];
char in[20];
int countf[20],num,ans;
struct nodeForAnswer{
int cf;
char ca[20];
}reserve[2010];
bool findTheSame(int n,char *in)
{
int i;int j = ans;int add;
for(i = 0;i < countf[n];i++)
{
add = 0;
if(!strcmp(in,joint[n][i].c))
{
strcpy(reserve[ans].ca,joint[n][i].c);reserve[ans].cf = joint[n][i].seq;ans++;
return true;
}
for(int k = 0;k < n;k++)
if(in[k] != joint[n][i].c[k])
add++;
if(add == 1){
strcpy(reserve[j].ca,joint[n][i].c);
reserve[j].cf = joint[n][i].seq;j++;
}
}
ans = j;
return false;
}
void findSubOne(int n,char *in)
{
int i,k,j;int nut = 0;
for(i = 0;i < countf[n-1];i++)
{
nut = 0;
for(k = 0,j = 0;k < n;)
{
if(in[k] != joint[n-1][i].c[j])nut++,k++;
else k++,j++;
if(nut >= 2)break;
}
if(nut >= 2)continue;
strcpy(reserve[ans].ca,joint[n-1][i].c);
reserve[ans].cf = joint[n-1][i].seq;
ans++;
}
}
void findAddOne(int n,char *in)
{
int i,k,j;int nut;
for(i = 0;i < countf[n+1];i++)
{
nut = 0;
for(k = 0,j = 0;k < n;)
{
if(in[k] != joint[n+1][i].c[j])nut++,j++;
else j++,k++;
if(nut >= 2)break;
}
if(nut >= 2)continue;
strcpy(reserve[ans].ca,joint[n+1][i].c);
reserve[ans].cf = joint[n+1][i].seq;
ans++;
}
}
int cmp(const void* e,const void* f)
{
struct nodeForAnswer *ee = (nodeForAnswer*)e;
struct nodeForAnswer *ff = (nodeForAnswer*)f;
return (ee->cf > ff->cf);
}
int main()
{
int i;num = 0;
memset(countf,0,sizeof(countf));
memset(joint,0,sizeof(joint));
while(scanf("%s",in) && strcmp(in,"#") != 0)
{
i = strlen(in);
strcpy(joint[i][countf[i]].c,in);
joint[i][countf[i]].seq = num;
num++;countf[i]++;
}
while(scanf("%s",in) && strcmp(in,"#") != 0)
{
i = strlen(in);ans = 0;
if(findTheSame(i,in)){
printf("%s is correct\n",in);
}
else {
findSubOne(i,in);
findAddOne(i,in);
qsort(reserve,ans,sizeof(reserve[0]),cmp);
printf("%s:",in);
for(i = 0;i < ans;i++)
printf(" %s",reserve[i].ca);
printf("\n");
}
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator