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

总是WA,真郁闷,高手麻烦指点一下:

Posted by zhb_msqx at 2007-08-24 17:03:04 on Problem 2001
我的思想就是当输入一个新的字符串以后就和前面输入所有的进行比较,返回一个compare的值,每次比较如果发现长度比原来prefix的长度长就更新这个字符串,最后比较下来最大的那个数值就是这个prefix的长度。
运行测试的数据没问题,也考虑了单词相同的情况。

#include <iostream>
#include <fstream>
using namespace std;

char word[1000][100];
char prefix[100][100];
int strnum;

int compare(int ii,int jj){        //ii就是当前的那个单词,jj就是原来插入的那个单词。
	int llen=strlen(word[ii]);
	int rlen=strlen(word[jj]);
	int pos=0;
	for(int i=0;i<llen&&i<rlen;i++){
		if(word[ii][i]==word[jj][i])continue;
		else{
			pos=i;
			break;
		}
	}	
	if(i==rlen){
		strcpy(prefix[jj],word[jj]);
		return i;
	}else if(i==llen){
		if(llen+1>rlen){
			for(int tmp=0;tmp<=i;tmp++){
				prefix[jj][tmp]=word[jj][tmp];
			}
			prefix[jj][tmp]='\0';	
		}
		return i;
	}else if(pos+1>strlen(prefix[jj])){
		for(int i=0;i<=pos;i++){
			prefix[jj][i]=word[jj][i];
		}
		prefix[jj][i]='\0';
	}
	return pos;
}

void insert(const char *c){
	strcpy(word[strnum],c);
	if(strnum==0){
		prefix[strnum][0]=word[strnum][0];
		prefix[strnum][1]='\0';
		strnum++;
		return;
	}
	int max=0;
	for(int i=0;i<strnum;i++){
		int pos=compare(strnum,i);
		if(pos>max)max=pos;
	}
	for(i=0;i<=max;i++){
		prefix[strnum][i]=word[strnum][i];
	}
	prefix[strnum][i]='\0';
	strnum++;
}

void print(){
	for(int i=0;i<strnum;i++){
		cout<<word[i]<<" "<<prefix[i]<<endl;
	}
	cout<<endl;
}

void main(){
//	ifstream cin("data.txt");
	char tmp[100];
	strnum=0;
	while(cin>>tmp){
		insert(tmp);
	}
	print();

}

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