problem
Description
你真的认为选课是那么容易的事吗?HYSBZ的ZY同志告诉你,原来选课也会让人产生一种想要回到火星的感觉。假设你的一周有n天,那么ZY编写的选课系统就会给你n堂课。但是该系统不允许在星期i和星期i+1的时候选第i堂课,也不允许你在星期n和星期一的时候选第n堂课。然后连你自己也搞不清哪种选课方案合法,哪种选课不合法了。你只想知道,你到底有多少种合法的选课方案。
Input
有多组数据,请读到文件末结束。
对于每组数据仅一行,1个正整数 n。
Output
对于每组输出只有一行,1个非负整数,为选课方案数量 mod (10^9+7).
Sample Input
2
4
Sample Output
0
2
【样例解释】
对于样例二:
周一上第二堂课,周二上第三堂课,周三上第四堂课,周四上第一堂课;
周一上第三堂课,周二上第四堂课,周三上第一堂课,周四上第二堂课。
共2种选课方案。
Data Constraint
对于第i组数据,n<=10*i, 1<=i<=3
对于100%的数据:1<=n<=100000
analysis
本来正解是组合数相关,但是……
gmh
打表找规律发现答案的前缀和 满足嗯……
code
#include<stdio.h>
#define mod 1000000007ll
using namespace std;
long long f[100005];
int n;
int main()
{
f[1]=f[2]=0,f[3]=1;
for (int i=4;i<=100000;i++)f[i]=(f[i-1]+f[i-2])*(i-1)+f[i-3],f[i]%=mod;
while (scanf("%d",&n)!=EOF)printf("%lld\n",(f[n]-f[n-1]+mod)%mod);
return 0;
}