题解 CF712D 【Memory and Scores】
不说了,直接上代码
#include<bits/stdc++.h>
#define ll long long
#define mod 1000000007
using namespace std;
ll f[1000005],s[1000005];
int main()
{
ll a,b,k,t,ans=0;
scanf("%lld%lld%lld%lld",&a,&b,&k,&t);
f[0]=1;
for (ll i=0;i<=2*k*t;i++)
{
s[i]=1;
}
for (ll i=1;i<=t;i++)
{
for (ll j=0;j<=2*k*t;j++)
{
if(j<=2*k)
{
f[j]=s[j];
}
else
{
f[j]=(s[j]-s[j-2*k-1]+mod)%mod;
}
}
s[0]=f[0];
for (ll j=1;j<=2*k*t+10000;j++)
{
s[j]=s[j-1]+f[j];
s[j]=s[j]%mod;
}
}
for (ll i=(b-a+1)*(b+1>a);i<=2*k*t;i++)
{
ans=(ans+s[i-(b-a+1)]*f[i])%mod;
}
printf("%lld",ans);
return 0;
}