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 ...
随机推荐
- php array_walk 和 array_reduce函数
1.array_walk:将数组中的元素(键+值)依次取出传给处理的函数,函数处理完就完了,没有返回值. $arr1=array( 'name'=>'zhangsan', 'age'=>3 ...
- ecshop订单中配送方式报错
警告内容:Warning: number_format() expects parameter 1 to be double, string given in D:\wamp\www\ecshop_o ...
- Demo学习: Collapsible Panels
Collapsible Panels 设置TUniPanel布局属性,布局属性在Ext里是比较常用的属性,当前版本虽已经提供了布局功能,但很不完善,比如当Panel.TitlePosition=tpR ...
- PyQt4学习笔记2:事件和信号
事件是任何 GUI 程序中很重要的部分.所有 GUI 应用都是事件驱动的.一个应用对其生命期产生的不同的事件类型做出反应.事件是主要由应用的用户产生.但是,也可以通过其他方法产生,比如,网络通信,窗口 ...
- SPOJ 4487 Splay 基本操作
插入操作,删除操作和置换操作都是单点的,所以不需要lazy标记.这个很简单,都是两次RotateTo,一次Splay操作就搞定. 求最大连续字段和的操作和线段树的题目类似,只需要保存最左边的连续最大字 ...
- VPN销售管理系统一键安装包
wget http://d.zmrbk.com/vpn/zmrvpn.sh;chmod +x zmrvph.sh;sh zmrvpn.sh 2>&1 | tee zmrbk.com.lo ...
- Workspace in use or cannot be created, choose a different one.--错误解决办法
eclipse 使用一段时间后,有时会因为一些故障自己就莫名奇妙的关闭了,再打开时有时没有问题,有时有会提示错误 Workspace Unavailable: 原因:出现这种情况一般是workspac ...
- 团体程序设计天梯赛-练习集L1-012. 计算指数
L1-012. 计算指数 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 真的没骗你,这道才是简单题 —— 对任意给定的不超过1 ...
- 关于ref与out的区别
写在最前面 这几天一直在公司接受培训,都是一些基础的知识,同时也乘着这个机会巩固一下自己的基础,基础太重要了.前些时一直看的是多线程方面的知识,接下来我会写一些其他方面的知识,毕竟作为一个实习新人得和 ...
- 数据聚合 & 分组:新一代系统监控的核心功能
遥想 2015 年 8 月 17 日,Cloud Insight 还在梳理功能原型,畅想 Cloud Insight 存在的意义:为什么阿里云用户需要使用 Cloud Insight 来加强管理. 而 ...