| ||||||||||
| 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 | |||||||||
Re:将那a[18]改成 656043856 ,不通过找我In Reply To:Re:将那a[18]改成 656043856 ,不通过找我 Posted by:hahaxiao at 2005-09-03 20:23:13 #include<iostream>//45975可以,45976就不行了
using namespace std;
long a[19]={1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,742900,2674440,9694845,35357670,129644790,477638700};
void LR(long node,long x);
long ntree(long n,long *x)
{
long sum=0;
long node;
for(node=1;node<19;node++)
{
if(sum+a[node]>=n) break;
else sum=sum+a[node];
}
*x=n-sum;
return node;
}
void print(long L,long Lx,long R,long Rx)
{
if(L>0)
{
printf("(");
LR(L,Lx);
printf(")");
}
printf("X");
if(R>0)
{
printf("(");
LR(R,Rx);
printf(")");
}
}
void LR(long node,long x)
{
long Lx,Rx,L,R;
long sum=0;
for(L=0;L<node;L++)
{
sum=sum+a[L]*a[node-1-L];
if(sum>=x) break;
}
if(sum==x)
{
R=node-L-1;
Rx=a[R];
Lx=1;
}
else
{
Rx=x-sum+a[L]*a[node-1-L];
R=node-L-1;
if(R<0) {L--;R=node-L-1;}
Lx=1;
if(Rx>=a[R])
{
Lx=Rx-a[R]+1;
Rx=a[R];
}
}
print(L,Lx,R,Rx);
}
int main(void)
{
long n,node,x;
scanf("%d",&n);
while(n)
{
if(n==1) printf("X");
else
{
node=ntree(n,&x); //表示树是含有node个结点的第x种情况的树
LR(node,x);
}
printf("\n");
scanf("%d",&n);
}
system("pause");
return 0;
}
怎么错了呢?哪位高手指点下啊
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator