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