题目:http://poj.org/problem?id=3007

题意:按照图示的改变字符串,问有多少种。。字符串。。

思路:分几种排序的方法,,刚开始用map 超时(map效率不高啊。。),后来搜了一下题解,用二叉排序树。。。

先贴AC代码:

 #include <iostream>
#include <cstring>
#include <algorithm>
using namespace std; typedef struct tree
{
char str[];
struct tree *l,*r;
}tr;
tr head;
int check(char s[])
{
tr *q;
tr *p=&head;
while(p)
{
if(strcmp(p->str,s)>)
{
if(p->l)
p=p->l;
else
{
q=new tr;
strcpy(q->str,s);
q->l=NULL;
q->r=NULL;
p->l=q;
return ;
}
}
else if(strcmp(p->str,s)<)
{
if(p->r)
p=p->r;
else
{
q=new tr;
strcpy(q->str,s);
q->l=NULL;
q->r=NULL;
p->r=q;
return ;
}
}
else
return ;
}
return ;
}
/*void pre(tr *qqq)
{
if(qqq)
{
cout<<qqq->str<<endl;
pre(qqq->l);
pre(qqq->r);
}
}*/
int main()
{
int t,i,j,len,cou,sum;
char s[],s1[];
cin>>t;
while(t--)
{
cin>>s;
strcpy(head.str,s);
head.l=NULL; head.r=NULL;
sum=;
len=strlen(s);
for(i=; i<len; i++)
{
cou=;
for(j=; j<i; j++)
s1[cou++]=s[j];
for(j=len-; j>=i; j--)
s1[cou++]=s[j];
s1[cou]='\0';
if(check(s1))
sum++; cou=;
for(j=len-; j>=i; j--)
s1[cou++]=s[j];
for(j=; j<i; j++)
s1[cou++]=s[j];
s1[cou]='\0';
if(check(s))
sum++; cou=;
for(j=i-; j>=; j--)
s1[cou++]=s[j];
for(j=len-; j>=i; j--)
s1[cou++]=s[j];
s1[cou]='\0';
if(check(s1))
sum++; cou=;
for(j=len-; j>=i; j--)
s1[cou++]=s[j];
for(j=i-; j>=; j--)
s1[cou++]=s[j];
s1[cou]='\0';
if(check(s1))
sum++; cou=;
for(j=; j<i; j++)
s1[cou++]=s[j];
for(j=i; j<=len-; j++)
s1[cou++]=s[j];
s1[cou]='\0';
if(check(s1))
sum++; cou=;
for(j=i; j<=len-; j++)
s1[cou++]=s[j];
for(j=; j<i; j++)
s1[cou++]=s[j];
s1[cou]='\0';
if(check(s1))
sum++; cou=;
for(j=i-; j>=; j--)
s1[cou++]=s[j];
for(j=i; j<=len-; j++)
s1[cou++]=s[j];
s1[cou]='\0';
if(check(s1))
sum++; cou=;
for(j=i; j<=len-; j++)
s1[cou++]=s[j];
for(j=i-; j>=; j--)
s1[cou++]=s[j];
s1[cou]='\0';
if(check(s1))
sum++; cou=;
for(j=len-; j>=i; j--)
s1[cou++]=s[j];
for(j=; j<=i-; j++)
s1[cou++]=s[j];
s1[cou]='\0';
if(check(s1))
sum++;
}
cout<<sum<<endl;
//tr *qqq;
//qqq=&head;
//pre(qqq);
}
return ;
}

再贴一下map超时的。。

 #include <iostream>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std; int main()
{
int t,i,j,len,cou,sum;
char s[],s1[];
int f;
cin>>t;
while(t--)
{
map<string,int>mp;
map<string,int>::iterator iter;
cin>>s;
sum=;
len=strlen(s);
for(i=; i<len; i++)
{
cou=;
for(j=; j<i; j++)
s1[cou++]=s[j];
for(j=len-; j>=i; j--)
s1[cou++]=s[j];
s1[cou]='\0';
f=;
iter=mp.begin();
while(iter!=mp.end())
{
if(iter->first==s1)
{
f=;
break;
}
iter++;
}
if(f==)
{
sum++;
mp[s1]=;
}
cou=;
for(j=len-; j>=i; j--)
s1[cou++]=s[j];
for(j=; j<i; j++)
s1[cou++]=s[j];
s1[cou]='\0';
f=;
iter=mp.begin();
while(iter!=mp.end())
{
if(iter->first==s1)
{
f=;
break;
}
iter++;
}
if(f==)
{
sum++;
mp[s1]=;
} cou=;
for(j=i-; j>=; j--)
s1[cou++]=s[j];
for(j=len-; j>=i; j--)
s1[cou++]=s[j];
s1[cou]='\0';
f=;
iter=mp.begin();
while(iter!=mp.end())
{
if(iter->first==s1)
{
f=;
break;
}
iter++;
}
if(f==)
{
sum++;
mp[s1]=;
} cou=;
for(j=len-; j>=i; j--)
s1[cou++]=s[j];
for(j=i-; j>=; j--)
s1[cou++]=s[j];
s1[cou]='\0';
f=;
iter=mp.begin();
while(iter!=mp.end())
{
if(iter->first==s1)
{
f=;
break;
}
iter++;
}
if(f==)
{
sum++;
mp[s1]=;
} cou=;
for(j=; j<i; j++)
s1[cou++]=s[j];
for(j=i; j<=len-; j++)
s1[cou++]=s[j];
s1[cou]='\0';
f=;
iter=mp.begin();
while(iter!=mp.end())
{
if(iter->first==s1)
{
f=;
break;
}
iter++;
}
if(f==)
{
sum++;
mp[s1]=;
} cou=;
for(j=i; j<=len-; j++)
s1[cou++]=s[j];
for(j=; j<i; j++)
s1[cou++]=s[j];
s1[cou]='\0';
f=;
iter=mp.begin();
while(iter!=mp.end())
{
if(iter->first==s1)
{
f=;
break;
}
iter++;
}
if(f==)
{
sum++;
mp[s1]=;
}
cou=;
for(j=i-; j>=; j--)
s1[cou++]=s[j];
for(j=i; j<=len-; j++)
s1[cou++]=s[j];
s1[cou]='\0';
f=;
iter=mp.begin();
while(iter!=mp.end())
{
if(iter->first==s1)
{
f=;
break;
}
iter++;
}
if(f==)
{
sum++;
mp[s1]=;
} cou=;
for(j=i; j<=len-; j++)
s1[cou++]=s[j];
for(j=i-; j>=; j--)
s1[cou++]=s[j];
s1[cou]='\0';
f=;
iter=mp.begin();
while(iter!=mp.end())
{
if(iter->first==s1)
{
f=;
break;
}
iter++;
}
if(f==)
{
sum++;
mp[s1]=;
}
}
cout<<sum<<endl;
}
return ;
}

poj 3007 Organize Your Train part II(二叉排序树)的更多相关文章

  1. POJ 3007 Organize Your Train part II

    题意: 如上图所示,将一个字符串进行分割,反转等操作后不同字符串的个数: 例如字符串abba:可以按三种比例分割:1:3:2:2:3:1 部分反转可以得到如下所有的字符串: 去掉重复可以得到六个不同的 ...

  2. POJ 3007 Organize Your Train part II (字典树 静态)

    Organize Your Train part II Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6478   Acce ...

  3. POJ 3007 Organize Your Train part II(哈希链地址法)

    http://poj.org/problem?id=3007 题意 :给你一个字符串,让你无论从什么地方分割,把这个字符串分成两部分s1和s2,然后再求出s3和s4,让你进行组合,看能出来多少种不同的 ...

  4. poj 3007 Organize Your Train part II(静态字典树哈希)

    Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6700 Accepted: 1922 Description RJ Freigh ...

  5. POJ 3007:Organize Your Train part II

    Organize Your Train part II Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7561   Acce ...

  6. Organize Your Train part II 字典树(此题专卡STL)

    Organize Your Train part II Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8787   Acce ...

  7. poj Organize Your Train part II

    http://poj.org/problem?id=3007 #include<cstdio> #include<algorithm> #include<cstring& ...

  8. Organize Your Train part II(hash)

    http://poj.org/problem?id=3007 第一次用STL做的,TLE了,自己构造字符串哈希函数才可以.. TLE代码: #include <cstdio> #inclu ...

  9. Organize Your Train part II-POJ3007模拟

    Organize Your Train part II Time Limit: 1000MS Memory Limit: 65536K Description RJ Freight, a Japane ...

随机推荐

  1. CURL的使用<发送与接收数据>

    $headers = array( "TYPE:xxxxooooo", "TOKEN:00000000" ); $data = array( 'data' =& ...

  2. ARM-Linux S5PV210 UART驱动(1)----用户手册中的硬件知识

    一.概述 The Universal Asynchronous Receiver and Transmitter (UART) in S5PV210 provide four independent ...

  3. 阶段性放弃 wxPython 前的总结

    为了实现一个管理本地电子书的程序,搞了一段时间 GUI,使用 wxPython. 实在难以适应和习惯,也搞不出什么太好看的效果. 最不能忍受的是,多线程处理能力太弱.遂决定放弃 GUI. 放弃之前,整 ...

  4. 开源CMS的忠实粉丝——We7

    说到开源CMS这个词,首先来说一下什么是开源,因为很多人可能会存在一个误区,开源就是免费使用,其实不然.开源产品,从事软件开发的专业人士都很清楚,开源就是开发源码,是把一个软件的开发过程中的技术结构, ...

  5. Android “NetworkOnMainThreadException”出错原因及解决办法

    原因: 不允许在主线程中通讯 方法1:非要在主线程中,当然也可以,这样去处理: StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Build ...

  6. springmvc整合redis架构搭建实例

    新换环境,又有新东西可以学习了,哈皮! 抽空学习之余看了一下redis,个人对Springmvc的爱是忠贞不渝,所以整理了一下Springmvc整合redis的环境搭建.分享学习. 第一步: 创建ma ...

  7. Android导入Cocos2D的Sample项目

    导入Cocos2D项目到Android的Eclipse时注意以下几点 1. Set up Variables: Eclipse->Windows->Preferences->Gene ...

  8. 如何把由js生成的内容水平居中?

    一.问题来源 如右侧的微博关注组件,直接用div的align居中没效果,我就开始百度了.即在<div> <script>.....</script>  </d ...

  9. PDF、WORD、PPT、TXT转换方法

  10. 分析jQuery中的each方法

    在看jQuery源码是怎么实现each方法之前,我们看一下js的原生实现. ECMAScript 5为数组定义了一个forEach方法,该方法接受两个参数:第一个参数是要在每一个数组项上运行的函数,第 ...