您的位置:首页 > 其它

How Many Trees?

2013-09-03 15:02 459 查看
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=30506#problem/Q

catalan

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "math.h"
#include "algorithm"
#include "iostream"

using namespace std;
const int maxn = 1005 ;
int a[ maxn ][ maxn ] ;
int b[ maxn ] ;
void catalan()
{
int i , j , len , carry ,temp ;
a[ 1 ][ 0 ] = b[ 1 ] = 1 ;
len = 1 ;
for( i = 2 ; i <= 1000 ; i++ )
{
for( j = 0 ; j < len ; j++ )
a[ i ][ j ] = a[ i - 1 ][ j ] * ( 4 * ( i - 1 ) + 2 ) ;
carry = 0 ;
for( j = 0 ; j < len ; j++ )
{
temp = a[ i ][ j ] + carry ;
a[ i ][ j ] = temp % 10 ;
carry = temp / 10 ;
}
while( carry )
{
a[ i ][ len++ ] = carry % 10 ;
carry /= 10 ;
}
carry = 0 ;
for( j = len - 1 ; j >= 0 ; j-- )
{
temp = a[ i ][ j ] + carry * 10 ;
a[ i ][ j ] = temp / ( i + 1) ;
carry = temp % ( i + 1 ) ;
}
while( !a[ i ] [ len - 1 ] )
{
len-- ;
}
b[ i ] = len ;
}
}

int main()
{
catalan();
int i , n ;
while( ~scanf( "%d" ,& n) )
{
if( n == 0 )
break ;
for( i = b[ n ] - 1 ; i >= 0 ; i-- )
printf( "%d" , a[ n ][ i ] ) ;
puts("") ;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息