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的递推式——题解的更多相关文章

  1. 51nod 1149 Pi的递推式(组合数学)

    传送门 解题思路 首先因为\(Pi\)不是整数,所以不能直接递推.这时我们要思考这个式子的实际意义,其实\(f(i)\)就可以看做从\(i\)这个点,每次可以向右走\(Pi\)步或\(1\)步,走到[ ...

  2. 51nod 1149 Pi的递推式 组合数

    题目大意: \(F(x) = 1 (0 \leq x < 4)\) \(F(x) = F(x-1) + F(x-\pi) (4 \leq x)\) 给定\(n\),求\(F(n)\) 题解: 我 ...

  3. 【51nod】1149 Pi的递推式

    题解 我们把这个函数的递归形式画成一张图,会发现答案是到每个出度为0的点的路径的方案数 这个可以用组合数算 记录一下P[i]为i减几次PI减到4以内 如果P[i + 1] > P[i],那么转向 ...

  4. 51nod1149 Pi的递推式

    基准时间限制:1 秒 空间限制:131072 KB 分值: 640 F(x) = 1 (0 <= x < 4) F(x) = F(x - 1) + F(x - pi) (4 <= x ...

  5. [题解][SHOI2013]超级跳马 动态规划/递推式/矩阵快速幂优化

    这道题... 让我见识了纪中的强大 这道题是来纪中第二天(7.2)做的,这么晚写题解是因为 我去学矩阵乘法啦啦啦啦啦对矩阵乘法一窍不通的童鞋戳链接啦 层层递推会TLE,正解矩阵快速幂 首先题意就是给你 ...

  6. 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式

    矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b     *     A B   =   a*A+b*C  a*c+b*D c d     ...

  7. P1067Warcraft III 守望者的烦恼(十大矩阵问题之七求递推式)

    https://vijos.org/p/1067 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她 ...

  8. 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) + ...

  9. Tyche 2191 WYF的递推式

    题目描述 WYF手中有这样一条递推式 WYF并不是想让你帮他做出结果,事实上,给定一个n,他能够迅速算出Fn.WYF只是想单纯的考验一下读者们. 输入描述 仅一行,三个整数N,F1,P 输出描述 仅一 ...

随机推荐

  1. 征战 OSG-序及目录

    其实很早就应该写这个了,一直拖到现在就是因为懒啊. 自从七月演习回来,被划到三维平台开发部,就一直混日子,也没人带领,也没人问结果,就这么一直堕落下来了,直到有一天才发现自己也看不上自己了,觉得自己这 ...

  2. jmeter的脚本增强之参数化

    jmeter作为一款开源的测试工具,功能广泛,深受测试同胞们的喜爱,这次来讲讲关于如何参数化及其方式.那为什么要进行一个参数化呢,如做压测时,要有大量的数据来模拟用户的真实场景,像登录页面操作,系统是 ...

  3. Python中assert的作用?

    1. assert 的作用是什么? assert这个关键字我们称之为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常. 什么情况下我们会需要这样的代码呢 ...

  4. [JSON].result()

    语法:[JSON].result() 返回:[True | False] 说明:用json字符串创建JSON实例时,如果该json字符串不是合法的json格式,会创建一个空的json实例.但是我们如果 ...

  5. Angualr6访问API

    参照 草根专栏- ASP.NET Core + Ng6 实战: https://v.qq.com/x/page/a0769armuui.html 1.environment.ts 添加apiUrlBa ...

  6. 出现java.lang.Exception: java.lang.RuntimeException: java.lang.NoSuchMethodException: com.web.visit.main.ClickVist$VisitMapper.<init>()的问题

    执行mapreduce报错java.lang.Exception: java.lang.RuntimeException: java.lang.NoSuchMethodException: com.w ...

  7. yun rpm

    RPM:RedHat Package Manager的简称,是一种数据库记录的方式的管理机制.当需要安装的软件的依赖软件都已经安装,则继续安装,否则不予安装. 特点:1.已经编译并打包完成2.软件的信 ...

  8. opencv-学习笔记(6)图像梯度Sobel以及canny边缘检测

    opencv-学习笔记(6)图像梯度Sobel以及canny边缘检测 这章讲了 sobel算子 scharr算子 Laplacion拉普拉斯算子 图像深度问题 Canny检测 图像梯度 sobel算子 ...

  9. parity 注记词

    spousal tint untold around rosy daintily unrated sheep choice showpiece chirping gala

  10. 压力测试工具-webbench

    简述 偶然情况下看到一款性能测试工具webbench,看着挺不错的记录一下安装过程,在以后项目上线过程中可以压一压一些页面的并发情况,对项目性能有个大致的了解. 原理 webbench首先fork出多 ...