| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
204MS(关键之处是,不要全部生成后排序,而要一边生成,一边检测重复)#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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator