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

204MS(关键之处是,不要全部生成后排序,而要一边生成,一边检测重复)

Posted by donkeyinacm at 2010-04-14 20:06:15 on Problem 3007
#include <iostream>
#include <algorithm>
using namespace std;
#define MAXL 75
#define MAXR 900
char *os,*rs,*res[MAXR];
int rtop;

void init()
{
	int i;
	os=new char[MAXL];
	rs=new char[MAXL];
	for(i=0;i<MAXR;i++)
		res[i]=new char[MAXL];
}


void Print()
{
	//	printf("%s\n",rs);
}


void insert(char *str)
{
	int i;
	for(i=0;i<rtop;i++)
		if(strcmp(str,res[i])==0)
			return;
		strcpy(res[rtop++],str);
}

int main()
{
	freopen("c:/a.txt","r",stdin);
	//	freopen("c:1.txt","w",stdout);
	init();
	int n,i,p,len,cnt;
	scanf("%d",&n);
	while(n--)
	{
		rtop=cnt=0;
		scanf("%s",os);
		len=strlen(os);
		for(p=1;p<=len-1;p++)
		{
			
			//位正 前正 后正
			strcpy(rs,os);
			insert(rs);
			Print();
			
			
			//位正 前逆 后正
			for(i=0;i<p;i++)
				rs[p-i-1]=os[i];
			insert(rs);
			Print();
			
			//位正 前逆 后逆
			for(i=p;i<len;i++)
				rs[p+len-i-1]=os[i];
			insert(rs);
			Print();
			
			//位正 前正 后逆
			for(i=0;i<p;i++)
				rs[i]=os[i];
			insert(rs);
			Print();
			
			
			//位逆 前正 后正
			for(i=p;i<len;i++)
				rs[i-p]=os[i];
			for(i=0;i<p;i++)
				rs[len-p+i]=os[i];
			rs[len]='\0';
			insert(rs);
			Print();
			
			
			
			//位逆 前逆 后正
			for(i=p;i<len;i++)
				rs[len-i-1]=os[i];
			insert(rs);
			Print();
			
			//位逆 前逆 后逆
			for(i=0;i<p;i++)
				rs[len-i-1]=os[i];
			insert(rs);
			Print();
			
			//位逆 前正 后逆
			for(i=p;i<len;i++)
				rs[i-p]=os[i];
			insert(rs);
			Print();
			
		}
		printf("%d\n",rtop);
		
	}
	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