long long mod = 1000000007;
int main()
{
long long t, k;
cin >> t >> k;
vector<int> a(t);
vector<int> b(t);
int bmax = 0;
for (int i = 0; i < t; ++i)
{
cin >> a[i] >> b[i];
bmax = max(bmax, b[i]);
}
vector<long long> buf(bmax + 1);
vector<long long> sum(bmax + 1, 0);
for (int i = 0; i < k&&i <= bmax; ++i)
buf[i] = 1;
for (int i = k; i <= bmax; ++i)
buf[i] = (buf[i - 1] + buf[i - k]) % mod;
for (int i = 1; i <= bmax; ++i)
sum[i] = (buf[i] + sum[i - 1]) % mod;
for (int i = 0; i < t; ++i)
cout << (sum[b[i]] - sum[a[i] - 1] + mod) % mod << endl;
return 0;
}
第五题代码,DP就可以了,注意最后数值溢出的问题;