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 ...
随机推荐
- HTML5新增标签的汇总与详解
趁着一点闲暇时间,把HTML5的新增标签整理了一下,用了表格的形式展现,分别归纳了各标签的用法及属性分析.这样方便各位以后在运用HTML5标记遇到疑惑时,直接上来对照看下就明了了,希望对大家有帮助哦. ...
- [ Web Service ] [ SOAP ] [ JSON ] [ XML ] 格式轉換
JSON格式產生器_Demo JSON格式產生器_ObjGen - Live JSON Generator JSON格式整理_JSON Formatter & Validator Online ...
- laravel--上传
1.视图里面 2.控制器里面 //收集表单提交数据 $input = $request->all(); //查看是否有图片提交上来 if ($request->hasFile('title ...
- phpstorm配置取消掉63342
http://ask.csdn.net/questions/171665
- 生产场景NFS共享存储优化及实战
生产场景NFS共享存储优化: 1.硬件:sas/ssd磁盘,买多块,raid0/raid10,网卡好 2.NFS服务器端优化加all_squash,async /backup/NFS 192.168. ...
- 谈谈python 中__name__ = '__main__' 的作用
最近刚刚学习python,看到别人的源代码中经常出现这样一个代码段: if __name__ = '__main__' dosomting() 觉得很晕,不知道这段代码的作用是什么,后来上网查了一些资 ...
- mysql mysqldump只导出表结构或只导出数据的实现方法
mysql mysqldump只导出表结构或只导出数据的实现方法,需要的朋友可以参考下. mysql mysqldump 只导出表结构 不导出数据 复制代码代码如下: mysqldump --opt ...
- iOS 通览(二)
一.关键词 extern:C语言的函数外部声明. 如果你要在一个.c或者.m中使用另外一个.c文件的函数的话,需要在文件中写入目标函数的外部引用的声明. 二.自定义View 自定义View添加控件对象 ...
- Java Timer, TimerTask
参考:http://batitan.iteye.com/blog/253483 TimerTask 就是一个run 方法,里边有些操作: Timer 是个线程,按各种调度方法(Timer.schedu ...
- hdu 4740 The Donkey of Gui Zhou(暴力搜索)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4740 [题意]: 森林里有一只驴和一只老虎,驴和老虎互相从来都没有见过,各自自己走过的地方不能走第二次 ...