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