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

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

Posted by Romantic0815 at 2012-03-15 16:34:35 on Problem 1035
#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