51NOD 1149:Pi的递推式——题解
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1149
F(x) = 1 (0 <= x < 4)F(x) = F(x - 1) + F(x - pi) (4 <= x)Pi = 3.1415926535.....现在给出一个N,求F(N)。由于结果巨大,只输出Mod 10^9 + 7的结果即可。
不好想啊……以及我曾经打了个表,并且还找到了规律,结果过到29就gg了……
参考:https://www.cnblogs.com/ivorysi/p/9197222.html
(这个参考是个神,我这样的凡人能解读到这种地步已经很不容易了)
总觉得我讲的很有问题啊……那我就顺着这个参考讲吧……
将递归展开,你就会发现是一张图,而所求即为最上层点到最下层点的方案路径数。
设$P[i]$表示到$i$这个点减几次pi到达其中一个终点,于是我们到达一次终点所需要经过的整数结点(即-1)与"非整数"结点(即-pi),可以通过设前者为$n-i$,则后者为$P[i]$,路径条数就可以用组合数求出。
但是要注意的是我们只要到达其中一个目标即会停止,即5-1-pi是合法的,而5-pi-1则是不可能的,即有些pi只能放在最后减,我们需要把这些pi扣除。
其实并不存在“这些”,事实上显然我们只有一个pi,也就是说下面的关键是判断这个pi是否会导致我们提前结束。
我们考虑,只要$i$的父亲结点(其实是$i+1$,但叫做父亲节点更好懂些)$P[i+1]>P[i]$,那么我们随便了,提前拐或者不拐最终到达的状态一定一致。
但是如果不满足的话,则我们在$i+1$或更早处转弯的话,就一定会导致我们提早结束,所以此时我们扣除这个pi即可。
这是这个参考的做法,个人感觉并不如:https://blog.csdn.net/qq_36797743/article/details/78930126这个更好想一些,但是解法比较自然,顺畅。
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<cstdio>
#include<cctype>
#include<vector>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef double dl;
typedef long long ll;
const dl pi=acos(-1.0);
const int p=1e9+;
const int N=1e6+;
inline int qpow(int k,int n){
int res=;
while(n){
if(n&)res=(ll)res*k%p;
k=(ll)k*k%p;n>>=;
}
return res;
}
int jc[N],inv[N],P[N];
void init(int n){
jc[]=;
for(int i=;i<=n;i++)jc[i]=(ll)jc[i-]*i%p;
inv[n]=qpow(jc[n],p-);
for(int i=n-;i;i--)inv[i]=(ll)inv[i+]*(i+)%p;
inv[]=;
}
inline int C(int n,int m){
return (ll)jc[n]*inv[m]%p*inv[n-m]%p;
}
int solve(int n){
if(n<)return ;
for(int i=;i<=n;i++)P[i]=(dl)(i-)/pi+;
int ans=;
for(int i=n;i>=;i--){
int s=n-i,t=P[i]-(P[i+]<=P[i]);
(ans+=C(s+t,s))%=p;
}
return ans;
}
int main(){
int n;
scanf("%d",&n);
init(n);
printf("%d\n",solve(n));
return ;
}
+++++++++++++++++++++++++++++++++++++++++++
+本文作者:luyouqi233。 +
+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+
+++++++++++++++++++++++++++++++++++++++++++
51NOD 1149:Pi的递推式——题解的更多相关文章
- 51nod 1149 Pi的递推式(组合数学)
传送门 解题思路 首先因为\(Pi\)不是整数,所以不能直接递推.这时我们要思考这个式子的实际意义,其实\(f(i)\)就可以看做从\(i\)这个点,每次可以向右走\(Pi\)步或\(1\)步,走到[ ...
- 51nod 1149 Pi的递推式 组合数
题目大意: \(F(x) = 1 (0 \leq x < 4)\) \(F(x) = F(x-1) + F(x-\pi) (4 \leq x)\) 给定\(n\),求\(F(n)\) 题解: 我 ...
- 【51nod】1149 Pi的递推式
题解 我们把这个函数的递归形式画成一张图,会发现答案是到每个出度为0的点的路径的方案数 这个可以用组合数算 记录一下P[i]为i减几次PI减到4以内 如果P[i + 1] > P[i],那么转向 ...
- 51nod1149 Pi的递推式
基准时间限制:1 秒 空间限制:131072 KB 分值: 640 F(x) = 1 (0 <= x < 4) F(x) = F(x - 1) + F(x - pi) (4 <= x ...
- [题解][SHOI2013]超级跳马 动态规划/递推式/矩阵快速幂优化
这道题... 让我见识了纪中的强大 这道题是来纪中第二天(7.2)做的,这么晚写题解是因为 我去学矩阵乘法啦啦啦啦啦对矩阵乘法一窍不通的童鞋戳链接啦 层层递推会TLE,正解矩阵快速幂 首先题意就是给你 ...
- 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式
矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b * A B = a*A+b*C a*c+b*D c d ...
- P1067Warcraft III 守望者的烦恼(十大矩阵问题之七求递推式)
https://vijos.org/p/1067 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她 ...
- hdu 1757 A Simple Math Problem (构造矩阵解决递推式问题)
题意:有一个递推式f(x) 当 x < 10 f(x) = x.当 x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + ...
- Tyche 2191 WYF的递推式
题目描述 WYF手中有这样一条递推式 WYF并不是想让你帮他做出结果,事实上,给定一个n,他能够迅速算出Fn.WYF只是想单纯的考验一下读者们. 输入描述 仅一行,三个整数N,F1,P 输出描述 仅一 ...
随机推荐
- mysql 开启远程连接
如图,修改mysql数据库中user表中的User字段为root的host为%,然后重新启动mysql服务即可让远程桌面连接本地.
- myeclipse tomcat部署按钮点击没反应
进入workspace目录,删除.metadata\.plugins\org.eclipse.core.runtime\.settings\com.genuitec.eclipse.ast.deplo ...
- 关于自学C语言开始时应该注意的问题分享—未完待续......
---恢复内容开始--- 自学C语言编程总结 第1章C语言概述 1. 如果用户将主函数的返回值类型定义为了void,则不需要返回任何值: 2. C语言的基本结构包括主函数和程序体两部分 ...
- angular-列表进行添加、编辑等操作时此行变色。
今天接触了一个功能,就是在一个列表中,当你新增或者对第N列进行编辑,删除等操作时这一列会变颜色.让用户对操作了哪行数据更认识更清晰,刷新之后这行的颜色就会消失.我觉得这个很有意思,记录一下.效果如下. ...
- 【checkbox-group、checkbox】 多项选择器组件说明
checkbox-group组件包裹checkbox组件的容器 原型: <check-group bindchange="[EventHandle]"> <che ...
- CSP201503-2:数字排序
引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...
- [CH0304]IncDec Sequence
和NOIP2018DAY1T1类似的题目,但思维难度高多了. 这题既可以抬高路面,也可以降低路面,而且目标平面不确定,就难起来了. 但是两道题的基本思路几乎一样,同样我们将 2~n 的高度差分,1之所 ...
- POJ 3498 March of the Penguins(网络最大流)
Description Somewhere near the south pole, a number of penguins are standing on a number of ice floe ...
- JavaScript筑基篇(二)->JavaScript数据类型
说明 介绍JavaScript数据类型 目录 前言 参考来源 前置技术要求 JavaScript的6种数据类型 哪6种数据类型 undefined 类型 null 类型 boolean 类型 numb ...
- css重修之书(一):如何用css制作比1px更细的边框
如何用css制作比1px更细的边框 在项目的开发过程中,我们常常会使用到border:1px solid xxx,来对元素添加边框: 可是1px的border看起来还是粗了一些粗,不美观,那么有什么方 ...