| ||||||||||
| 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 | |||||||||
弱问一下,用递归做出来为什么那么慢啊。。。#include<iostream>
#include<string>
using namespace std;
int f[21]=
{
1,1,2,5,14,
42,132,429,1430,4862,
16796,58786,208012,742900,2674440,
9694845,35357670,129644790,477638700,1767263190,6564120420
};
string tree(int node,int num)
{
string tr,tr_L,tr_R;
int i,L,R;
if(node==0)return tr;
else if(node==1){tr.push_back('X');return tr;}
for(i=0;i<node&&num>f[i]*f[node-1-i];num-=f[i]*f[node-1-i],i++);
for(L=1;f[node-1-i]<num;num-=f[node-1-i],L++);
R=num;
tr_L=tree(i,L);
tr_R=tree(node-i-1,R);
if(tr_L.size())
{
tr.push_back('(');
tr+=tr_L;
tr.push_back(')');
}
tr.push_back('X');
if(tr_R.size())
{
tr.push_back('(');
tr+=tr_R;
tr.push_back(')');
}
return tr;
}
int main()
{
int num,i;
cin>>num;
while(num)
{
num++;
for(i=0;num>f[i];num-=f[i],i++);
cout<<tree(i,num)<<'\n';
cin>>num;
}
return 0;
}
79MS
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator