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 bfyq at 2008-08-28 16:40:06 on Problem 1002
In Reply To:原来数组要开这么大啊!!! Posted by:xpwang at 2008-05-31 10:32:25
> 我也改成50了,可就不AC了,真太不爽了!!!
#include <iostream>
using namespace std;

void unit(char *str)
{
	int i=1;
	while(str[i]!='\0')
	{
		if(str[i]<60) 
		{
			i++;             //logic error:!!
			continue;
		}                    //logic error:!!!
		else if(str[i]>='A'&&str[i]<='C')
			str[i]='2';
		else if(str[i]<='F')
			str[i]='3';
		else if(str[i]<='I')
			str[i]='4';
		else if(str[i]<='L')
			str[i]='5';
		else if(str[i]<='O')
			str[i]='6';
		else if(str[i]<='S')
			str[i]='7';
		else if(str[i]<='V')
			str[i]='8';
		else if(str[i]<='Y')
			str[i]='9';
		i++;
	}
}

bool isSame(char *str1,char *str2)
{
	bool f=true;
	int i=1,j=1;
	while(str1[i]!='\0'&&str2[j]!='\0')
	{
		if(str1[i]!='-'&&str2[j]!='-')
		{
			if(str1[i]!=str2[j]) f=false;
			i++,j++;
		}
		else if(str1[i]=='-'&&str2[j]!='-')
		{
			i++;
		}
		else if(str1[i]!='-'&&str2[j]=='-')
		{
			j++;
		}
		else
		{
			i++,j++;
		}
	}
	return f;
}

void out(char *str)
{
	int c=0,i=1;
	while(str[i]!='\0')          //logic error:!!!
	{
		if(c==3)
		{
			cout<<"-";
			c++;                 //logic error:!!
		}
	    if(str[i]!='-')
		{
			cout<<str[i];
			c++;
		}
		i++;
	}
}

int isLarger(const void* stra,const void* strb)
{
	int i=1,j=1,c=0,    //logic error:i,j must be initialized.
	    f=0;
	char *str1=*(char**)stra,*str2=*(char**)strb;
	while(str1[i]!='\0'&&str2[j]!='\0')
	{
		if(str1[i]!='-'&&str2[j]!='-') //logic error:!!!!
		{
			if(str1[i]!=str2[j]) 
			{
				f=str1[i]-str2[j];
				break;
			}
			else            
			{
				i++;
				j++;
			}
		}
		else if(str1[i]=='-'&&str2[j]!='-')
		{
			i++;
		}
		else if(str1[i]!='-'&&str2[j]=='-')
		{
			j++;
		}
		else
		{
			i++,j++;
		}
	}
	return f;
}

int main()
{
	int n,i;
	cin>>n;
	char **pstr=(char **)malloc(sizeof(char*)*n);
	memset(pstr,'\0',sizeof(char*)*n);
	for(i=0;i<n;i++)
	{
		pstr[i]=(char *)malloc(sizeof(char)*50);
		memset(pstr[i],'\0',sizeof(char)*50);
		pstr[i][0]=1;
		cin>>pstr[i]+1;   //logic error:begin from pstr[i]+1
	}

	//process
	for(i=0;i<n;i++)
	{
		unit(pstr[i]);
	}


	//sort
	qsort(pstr,n,sizeof(char*),isLarger);

	//count
	int j;
	for(i=0;i<n;i=j)
	{
		j=i+1;
		while(j<n&&isSame(pstr[i],pstr[j]))//logic error:j<n!!!
		{
			pstr[i][0]++;
			j++;
		}
	}

	//out
	int f=0;
	for(i=0;i<n;i++)
	{
		if(pstr[i][0]>1)
		{
			out(pstr[i]);
			cout<<" "<<(int)pstr[i][0]<<endl;
			f++;
		}
	}
	if(!f) cout<<"No duplicates."<<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