Codevs 3322 时空跳跃者的困境(组合数 二项式定理)
2017-03-27 22:15
232 查看
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
数学/物理 矩阵乘法 数论
时间限制: 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; }
相关文章推荐
- codevs 3315 时空跳跃者的魔法 MST
- Codevs 3315 时空跳跃者的魔法
- Codevs3315时空跳跃者的魔法
- codevs 1994 排队 排列组合+高精度
- Codevs 2505 上学路线 (组合数学)
- CodeVS1631 组合数
- codevs 1631组合数 乘法逆元求组合数
- codevs 4064 组合 x
- [codevs1262] 不要把球传我 数论+组合数学
- codevs2218 补丁vs错误 1999年CTSC国家队选拔赛[三星]
- 为什么VSCode的JS编辑模式频繁地自动格式化代码,打字时稍微停顿一下光标就移动到分号处还得手动弄回来,体验很差
- CODE[VS] 1018 单词接龙
- codevs 1006
- codevs1249 多边形面积 解题报告
- codevs 1107 等价表达式
- go环境搭建及vscode中调试
- codevs 2606 约数和问题
- 【codevs3160】最长公共子串 后缀数组
- codevs1008
- Tyvj P1077 CODE[VS] 2190 有理逼近