题目描述
定义序列 fi 如下:
当 i<0 时, fi=0 。
当 i=0 时,fi=1 。
当 i≥1 时,有 fi=∑j=i−ki=1 fj 。
现给定 n,k ,求 fn 。由于这个值可能太大,你只需要输出这个值对 mod 取模的结果。
输入格式
一行三个自然数 k,n,mod
。
输出格式
一行一个自然数,表示答案。
输入样例
4 2 100
输出样例
5
数据范围
对于 30% 的数据,
对于额外 30% 的数据,
对于 100% 的数据 1≤n,k≤105,2≤mod≤109
代码
#include<bits/stdc++.h>
using namespace std;
int n,k,mod ;
long long f[200005] ;
long long s[200005] ;
int main() {
scanf("%d%d%d",&n,&k,&mod) ;
s[100000+0]=f[100000+0]=1 ;
for(int i=1 ;i<=n ;i++) {
f[100000+i]=(s[100000+i-1]-s[100000+i-k-1])%mod ;
s[100000+i]=(s[100000+i-1]+f[100000+i])%mod ;
}
printf("%d",(f[100000+n]+mod)%mod) ;
return 0 ;
}
我们老师说是什么偏移
有没有大佬解释下代码(摸鱼没听