基准时间限制:1 秒 空间限制:131072 KB 分值: 640 难度:8级算法题
收藏
关注
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的结果即可。
Input
输入一个整数N(1 <= N <= 10^6)
Output
输出F(N) Mod 10^9 + 7
Input示例
5
Output示例
3
李陶冶 (题目提供者)
【分析】
组合数。辣鸡题目。根本没头绪系列。
【代码】
//51nod 1149 Pi的递推式
#include<bits/stdc++.h>
#define pi acos(-1)
#define ll long long
#define M(a) memset(a,0,sizeof a)
#define fo(i,j,k) for(i=j;i<=k;i++)
using namespace std;
const int mxn=1000005;
const int mod=1e9+7;
int n,m,T,ans;
int fac[mxn],inv[mxn];
inline void init()
{
int i,j;
fac[0]=inv[0]=inv[1]=1;
fo(i,1,n) fac[i]=(ll)fac[i-1]*i%mod;
fo(i,2,n) inv[i]=(ll)(mod-mod/i)*inv[mod%i]%mod;
fo(i,1,n) inv[i]=(ll)inv[i]*inv[i-1]%mod;
}
inline ll C(int n,int m)
{
if(n<m) return 0;
return (ll)fac[n]*inv[m]%mod*inv[n-m]%mod;
}
int main()
{
int i,j;
scanf("%d",&n);init();
if(n<4) return puts("1"),0;
fo(i,0,n-4)
{
int t=((double)n-4-i)/pi;
ans=(ans+C(t+i,i))%mod;
}
for(i=0;pi*i<=n-4;i++)
{
int t=(n-4-pi*i);
ans=(ans+C(t+i,i))%mod;
}
printf("%d\n",ans);
return 0;
}