hdoj.2067 小兔的棋盘【卡特兰数列】 2015/08/27
2015-08-27 09:50
1341 查看
小兔的棋盘
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7722 Accepted Submission(s): 4115
[align=left]Problem Description[/align]
小兔的叔叔从外面旅游回来给她带来了一个礼物,小兔高兴地跑回自己的房间,拆开一看是一个棋盘,小兔有所失望。不过没过几天发现了棋盘的好玩之处。从起点(0,0)走到终点(n,n)的最短路径数是C(2n,n),现在小兔又想如果不穿越对角线(但可接触对角线上的格点),这样的路径数有多少?小兔想了很长时间都没想出来,现在想请你帮助小兔解决这个问题,对于你来说应该不难吧!
[align=left]Input[/align]
每次输入一个数n(1<=n<=35),当n等于-1时结束输入。
[align=left]Output[/align]
对于每个输入数据输出路径数,具体格式看Sample。
[align=left]Sample Input[/align]
1 3 12 -1
[align=left]Sample Output[/align]
1 1 2 2 3 10 3 12 416024
[align=left]Author[/align]
Rabbit
[align=left]Source[/align]
RPG专场练习赛
注:卡特兰数列,我用的是大数,别人说long long 能过 我试了 wa了
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int c[101][100],b[100]; void catalan(){ memset(c,0,sizeof(c)); c[1][0]=1;b[1]=1; int i,j,k,len=1,flag; for( i=2;i<=100;++i ){ k = 4 * i - 2; flag = 0; for( j = 0 ; j < len ; ++j ) //乘 c[i][j] = c[i-1][j] * k; for( j = 0 ; j < len ; ++j ){ // 进位 k = c[i][j] + flag; c[i][j] = k % 10; flag = k / 10; } while( flag ){ //进位 c[i][len++] = flag%10; flag /= 10; } flag = 0; for( j=len-1;j>=0;--j ){ // 除 k = flag * 10 + c[i][j]; c[i][j] = k / (i+1); flag = k % (i+1); } while( !c[i][len-1] ) //高位除零 len--; b[i] = len; // 记录当前项的位数 } } void cheng(){ int i , j , len; for( i = 1 ; i <= 35 ; ++i ){ len = b[i]; for( j = 0 ; j < len ; ++j ) c[i][j] *= 2; for( j = 0 ; j < len ; ++j ) if( c[i][j] > 9 ){ c[i][j+1] += c[i][j] / 10; c[i][j] %= 10; } if( c[i][len] ) len++; b[i] = len; } } int main(){ int n,i,ans=1; catalan(); cheng(); while( ~scanf("%d",&n)&&n!=-1 ){ printf("%d %d ",ans++,n); for( i = b -1 ; i >= 0 ; --i ) printf("%d",c [i]); printf("\n"); } return 0; }
相关文章推荐
- 社説 20150827 企業年金改革 多くの人が活用できる制度に
- 面向对象的三个基本特征是:封装、继承、多态
- Could not create the view: An unexpected exception was thrown tomcat中 Servlet 错误解决方法
- Leetcode: Reverse Integer
- 人工智能与模式识别 --中国计算机学会推荐国际学术刊物
- 面试总结——&a+1
- RSA加密算法的java实现
- First Missing Positive
- windows下忘记MySQL密码的修改方法--(转)
- 2015.6.17(Tair)
- Ubuntu更新可用程序列表
- shell条件测试
- 用鲁大师硬件检测查看自己的电脑配置
- linux 防火墙配置规则
- 社説 20150827 全国学力テスト 大阪府の入試利用は疑問だ
- 内部服务器如何提供访问服务
- java.lang.IndexOutOfBoundsException at java.io.FileOutputStream.writeBytes(Native Method)
- 聊聊并发——深入分析ConcurrentHashMap
- 2015.6.15(nut-console结合SpringMVC)
- Ubuntu配置FTP,SSH,NFS服务