火车进出站问题是一个经典 的卡特兰数问题

可以使用组合公式求解

f[N]=C(2n,n)/(n+1);

#include<iostream>
using namespace std;
int n;
int a[10000];
void mul(int a[],int b)
{
     a[1]*=b;
     for (int i=2;i<=a[0];i++)
     {
         a[i]=a[i]*b;
         a[i]+=a[i-1]/10;
         a[i-1]%=10;
     }
     while (a[a[0]]>=10)
     {
           a[++a[0]]=a[a[0]-1]/10;
           a[a[0]-1]%=10;
     }
}
void div(int a[],int b)
{
     for (int i=a[0];i>1;i--)
     {
         a[i-1]+=(a[i]%b)*10;
         a[i]/=b;
     }
     a[1]/=b;
     while (a[a[0]]==0&&a[0]>1) a[0]--;
}
void print(int a[])
{
     for (int i=a[0];i>0;i--) cout<<a[i];
     cout<<endl;
}
int main()
{
    cin>>n;
    a[0]=a[1]=1;
    for (int i=n+1;i<=2*n;i++)
      mul(a,i);
    for (int i=2;i<=n;i++)
      div(a,i);
    div(a,n+1);
    print(a);
    return 0;
}