Codevs 3322 时空跳跃者的困境(组合数 二项式定理)
3322 时空跳跃者的困境
时间限制: 1 s
空间限制: 64000 KB
题目等级 : 钻石 Diamond
题目描述 Description
背景:收集完能量的圣殿战士suntian开始了他的追捕行动。费尽千辛万苦,他终于看到了飞翔的影子,于是他加快了速度冲向飞翔。在两人只差0.01mm的时候,飞翔突然手一挥,在suntian眼前就出现了一个黑洞。suntian掉入其中……
描述:等suntian站稳后,发现出现了一个扭曲的三维时空,于是suntian用心灵波动在0.00000000001ms内找到了这个时空的奇点(就是出口)。他发现奇点是闭合的,然而这个奇点的旁边竟然有一个开关(飞翔的失误?!),而且是手摇转动的!suntian来到开关前,发现在开关的把手上有一些文字:“To open this point,turn “s” times.If turn the wrong times,this point will disappear.”但是这个s又是多少呢?于是suntian开始在开关附近寻找。终于,suntian发现了一块大石板,上面刻着:s可由一系列二项式系数(二项式的展开是按照二项式的标准展开方式展开的)组成的三角形数阵推得。这个三角形数阵的第k行就是(a+b)^(k-1)的展开式的二项式系数(k从1开始)。s=第n行的第一个数+第n-1行的第二个数+第n-2行的第三个数+…(直到要加的某一个数已经不属于这个三角形)。那么,suntian到底要转动多少下呢?
输入描述 Input Description
共一行,为n,(1<=n<=10^4,n∈N)。
输出描述 Output Description
输出:共一行,为总转动数s。
样例输入 Sample Input
5
样例输出 Sample Output
5
数据范围及提示 Data Size & Hint
请看上面。
分类标签 Tags
数学/物理 矩阵乘法 数论
/*
没分做法 但是方法很重要2333.
组合数 二项式定理乱搞.
可以推出C(n,m-1)和C(n-1,m)的关系.
然后 然后 然后
无意间试前几项发现竟是个斐波那契数列....
论数学题暴力的作用.
O(n)的 只是爆了精度.
这种方法不改高精度了 涉及除法.
正确做法就是斐波那契数列+高精度加法了
先不打了.
so我会用别的方法算斐波那契数列了23333.
(然而并没有什么卵用.
*/
#include<iostream>
#include<cstdio>
#define LL long long
#define MAXN 10001
using namespace std;
LL ans,c[MAXN],n,m,i,j;
void slove()
{
c[0]=1;
//for(int i=1;i<=m;i++) c[i]=c[i-1]*(n-i+1)/i;
//ans=c[m];
ans=c[1]=1;i=n,j=1;
for(int k=2;k<=m;k++)
{
c[k]=c[k-1]*((i-j)*(i-j+1))/(i*j);
i--,j++;
ans+=c[k];
}
cout<<ans;
}
int main()
{
cin>>n;n--;
if(n&1) m=(n>>1)+1;
else m=(n>>1)+1;
slove();
return 0;
}