Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:求大牛们的指教、实在过不了

Posted by 430621199202172720 at 2012-03-15 17:53:44 on Problem 1035
In Reply To:求大牛们的指教、实在过不了 Posted by:Romantic0815 at 2012-03-15 16:34:35
> #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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator