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号
浙公网安备 33010602011771号