题意:有两种花可以吃,white花只能连续吃k个,red花不受限制,当吃a到b朵花时一共有多少种吃法?注意:(WWWR)不算,因为W(W没有k)个连续 WWR

所以:dp[i]表前i个合法的数量
则: dp[i] = dp[i - 1] + dp[i - k]
dp[i - 1] 相当于当前位置为R(没有限制)
dp[i - k] 相当于当前位置为W(i-k这个范围为W)

#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 1e6 + 5;
const int maxm = 1e5;
int dp[maxn], sum[maxn];
int main() {
    int n, k;
    cin >> n >> k;
    dp[0] = 1;
    for (int i = 1; i <= maxm; i++) {
        dp[i] = dp[i - 1];
        if (i >= k) dp[i] += dp[i - k];
        dp[i] %= mod;
    }
    for (int i = 1; i <= maxm; i++) {
        sum[i] = sum[i - 1] + dp[i];
        sum[i] %= mod;
    }
    int l, r;
    while (n--) {
        cin >> l >> r;
        cout << (sum[r] - sum[l - 1] + mod) % mod << endl;
    }
    return 0;
}