Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
Register

## 我哪里错了，我没看出来什么地方错误了，所有的数据都是对的！！！

Posted by zhb_msqx at 2007-08-29 13:36:36 on Problem 1095
```#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

long int a[100]={0,1,3,8,22,64,196,625,2055,6917,23713,82499,290511,1033411,3707851,13402696,48760366,178405156,656043856};
long int b[100]={1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,742900,2674440,9694845,35357670,129644790,477638700};

string func(int i,int pth){     //p代表有几个棒子，pth代表p个棒子的第pth中排列
if(i==0)return "";
else if(i==1)return "(X)";
else if(i==2){
if(pth==1)return"(X(X))";
else return "((X)X)";
}
int last=pth;
int sum=0;
int left;int right;
for(int s=0;s<i;s++){
sum+=b[s]*b[i-s-1];
if(sum>=last){
left=s;right=i-s-1;
sum-=b[s]*b[i-s-1];
break;
}
}

for(s=1;s*b[right]<=last-sum;s++){}
return ("("+func(left,s-1)+"X"+func(right,last-sum-(s-1)*b[right])+")");
}

string cal(int n){
if(n==0)return "";
else if(n==1)return "X";
else if(n==2)return"X(X)";
else if(n==3)return "(X)X";

for(int i=0;a[i]<n;i++){}

int last=n-a[i-1];
int sum=0;

int left;int right;
for(int s=0;s<i;s++){
sum+=b[s]*b[i-s-1];
if(sum>=last){
left=s;right=i-s-1;
sum-=b[s]*b[i-s-1];
break;
}
}

for(s=1;s*b[right]<=last-sum;s++){}

return (func(left,s-1)+"X"+func(right,last-sum-(s-1)*b[right]));
//	return "";
}

void main(){
int n;
while(1){
cin>>n;
if(n==0)break;
cout<<cal(n)<<endl;
}
}
```

Followed by: