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 loloseed at 2006-12-23 14:40:26 on Problem 1002
//快排
#include <iostream>
#include <string>
using namespace std;

typedef struct TelInf{
	char * TelNum;
	int num;
	void operator =(const TelInf &);
	void operator =(char *);
	TelInf(){
		TelNum=new char [8];
		num=0;
	}
	TelInf(const TelInf & tel){
		TelNum=new char [8];
		strcpy(TelNum,tel.TelNum);
		num=tel.num;
	}
	~TelInf(){
		delete []TelNum;
	}
}TelInf,*TelInfo;

void TelInf::operator =(const TelInf &tel){
	TelNum=new char [8];
	strcpy(this->TelNum,tel.TelNum);
	this->num=tel.num;
}

void TelInf::operator =(char *telnum){
	strcpy(this->TelNum,telnum);
	this->num++;
}

void ToDigit(char * telnum){
	char tel[8];
	for(int i=0,j=0;telnum[i];i++){
		if (telnum[i]=='-')
			continue;
		else if(telnum[i]>='0' && telnum[i] <='9')
			tel[j++]=telnum[i];
		else if(telnum[i]>='A' &&telnum[i]<='R')
			tel[j++]=(char)((telnum[i]-'A')/3+'0'+2);
		else 
			tel[j++]=(char)((telnum[i]-'A'-1)/3+'0'+2);
	}
	tel[j]='\0';
	strcpy(telnum,tel);
}

int FindTel(TelInfo tels,char *telnum,int DailNum,int &num){
	if(!DailNum)
		return 0;
	for(int i=0;i<DailNum;i++){
		if(strcmp(tels[i].TelNum,telnum)==0){
			tels[i].num++;
			if (tels[i].num==2)
				num++;
			return 1;
		}
	}
	return 0;
}

int Partition(TelInfo tels,int low,int high){
	TelInf t=tels[low];
	char key[8];
	strcpy(key,t.TelNum);
	while(low<high){
		while(low<high && strcmp(key,tels[high].TelNum)<0)
			high--;
		tels[low]=tels[high];
		while(low<high && strcmp(key,tels[low].TelNum)>0)
			low++;
		tels[high]=tels[low];
	}
	tels[low]=t;
	return low;
}

void QuickSort(TelInfo tels,int low,int high){
	if(low>=high)
		return;
	int pivotloc=Partition(tels,low,high);
	QuickSort(tels,low,pivotloc-1);
	QuickSort(tels,pivotloc+1,high);
}
int main()
{
	int num=0;
	int nums;
	int DailNum=0;
	cin>>nums;
	char telnum[16];
	TelInfo tels=new TelInf [nums];
	int j,i=1;
	while (i<=nums){
		cin>>telnum;
		ToDigit(telnum);
		if(!FindTel(tels,telnum,DailNum,num)){
			tels[DailNum++]=telnum;
		}
		i++;
	}
	if(num==0){
		cout<<"No duplicates."<<endl;
		return 0;
	}
	int low=0,high=DailNum-1;
//	cout<<DailNum<<endl;
	QuickSort(tels,low,high);
	int flag;
	for(j=0;j<DailNum;j++){
		if(tels[j].num>1){
			flag=1;
			for(i=0;i<8;i++){
				if(i==3 && flag){
					cout<<"-";
					flag=0;
					i--;
				}
				else{
		cout<<(tels[j].TelNum)[i];
				}
		}
			cout<<" "<<tels[j].num<<endl;
		}
	}
	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