Codeforces 474 D. Flowers
简单递推....
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long int LL;
const LL MOD=1000000007;
const int maxn=100100;
int t,k;
LL tui[maxn];
LL sum[maxn];
void TUI(int k)
{
tui[1]=1;
if(1==k) tui[1]++;
tui[0]=1;
sum[0]=0;
sum[1]=tui[1];
for(int i=2;i<maxn;i++)
{
if(i-k>=0) tui[i]=(tui[i-1]+tui[i-k])%MOD;
else tui[i]=tui[i-1]%MOD;
}
for(int i=2;i<maxn;i++)
{
sum[i]=(sum[i-1]+tui[i])%MOD;
}
}
int main()
{
scanf("%d%d",&t,&k);
TUI(k);
sum[0]=0;
while(t--)
{
int l,r;
scanf("%d%d",&l,&r);
cout<<(sum[r]-sum[l-1]+MOD*2)%MOD<<endl;
}
return 0;
}
浙公网安备 33010602011771号