poj 3007 Organize Your Train part II(二叉排序树)
题目: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(二叉排序树)的更多相关文章
- POJ 3007 Organize Your Train part II
题意: 如上图所示,将一个字符串进行分割,反转等操作后不同字符串的个数: 例如字符串abba:可以按三种比例分割:1:3:2:2:3:1 部分反转可以得到如下所有的字符串: 去掉重复可以得到六个不同的 ...
- POJ 3007 Organize Your Train part II (字典树 静态)
Organize Your Train part II Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6478 Acce ...
- POJ 3007 Organize Your Train part II(哈希链地址法)
http://poj.org/problem?id=3007 题意 :给你一个字符串,让你无论从什么地方分割,把这个字符串分成两部分s1和s2,然后再求出s3和s4,让你进行组合,看能出来多少种不同的 ...
- poj 3007 Organize Your Train part II(静态字典树哈希)
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6700 Accepted: 1922 Description RJ Freigh ...
- POJ 3007:Organize Your Train part II
Organize Your Train part II Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7561 Acce ...
- Organize Your Train part II 字典树(此题专卡STL)
Organize Your Train part II Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8787 Acce ...
- poj Organize Your Train part II
http://poj.org/problem?id=3007 #include<cstdio> #include<algorithm> #include<cstring& ...
- Organize Your Train part II(hash)
http://poj.org/problem?id=3007 第一次用STL做的,TLE了,自己构造字符串哈希函数才可以.. TLE代码: #include <cstdio> #inclu ...
- Organize Your Train part II-POJ3007模拟
Organize Your Train part II Time Limit: 1000MS Memory Limit: 65536K Description RJ Freight, a Japane ...
随机推荐
- event事件:
onabort: 图像的加载被中断onblur: 元素失去焦点onchange: 域的内容被改变onclick: 当用户点击某个对象时调用的事件句柄ondblclick: 当用户双击某个对象时调用的事 ...
- 实现在DevExpress.XtraGrid.GridControl的列头绘制复选框以实现全选的功能
首先新建一个Win Form测试项目,拖一个GridControl控件到窗体上. public partial class Form1 : Form { public Form1() { Initia ...
- The Best Rank (25)(排名算法)
To evaluate the performance of our first year CS majored students, we consider their grades of three ...
- Oracle查看用户所在表空间
查看当前用户所在表空间 select username,default_tablespace from user_users; 修改用户默认表空间 alter user 用户名 default tab ...
- Matlab删除NaN数据
删除包含NaN的行: a(any(isnan(a), 2),:) = []; 删除全部为NaN的行: a(all(isnan(a), 2),:) = [];
- lua5.3调用C/C++
马上面临毕业设计,打算做点跟网游有关的,先从做周边工具开始,目前正在做一个协议序列化和反序列化的东西,广告一波先: https://github.com/Anti-Magic/rproto 目前非常简 ...
- C#微信登录-手机网站APP应用
要求:公众号必须先认证,认证费用¥300/年,比较黑 一.微信登录核心代码 //核心代码,没判断异常 1.登录页面 protected void Page_Load(object sender, Ev ...
- 在SpringMVC利用MockMvc进行单元测试
spring在线文档:https://docs.spring.io/spring/docs/current/javadoc-api/index.html?index-files/index-13.ht ...
- ExtJS4.2学习(四)Grid表格中文排序问题(转)
鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-07/173.html --------------- ...
- [转载]JS对URL的编码
虽然escape().encodeURI().encodeURIComponent()三种方法都能对一些影响URL完整性的特殊字符进行过滤.但后两者是将字符串转换为UTF-8的方式来传输,解决了页面编 ...