Submission
Status:
PPPPPPPPPP-P-PP-
Score: 130
User: lufychop
Problemset: Chocolate
Language: cpp
Time: 0.177 second
Submitted On: 2025-03-17 12:29:06
#include <bits/stdc++.h>
using namespace std;
long long n,k,c,l,h,sum=0,mod=1e9+7;
vector<long long> a(5001);
vector<long long> p(5001,-1);
vector<long long> ml(5001,6000);
vector<long long> mr(5001,-1);
vector<long long> qs(5001,0);
vector<long long> dp(5001,0);
int main(void)
{
cin>>n>>k>>c;
p[0]=(c==0);
for(int i=1;i<=n;i++)
{
cin>>a[i];
p[i]=1;
}
cin>>l>>h;
for(int i=1;i<=n;i++)
{
for(int j=0;j<c;j++)
{
if(p[i]*i>2e9)
{
break;
}
p[i]=p[i]*i;
}
}
for(int i=1;i<=n;i++)
{
sum=0;
for(int j=i;j<=n;j++)
{
if(p[j-i]==-1)
{
break;
}
if(sum+p[j-i]*a[j]>2e9)
{
break;
}
sum=sum+p[j-i]*a[j];
if(l<=sum && sum<=h)
{
ml[j]=min(ml[j],(long long)i);
mr[j]=max(mr[j],(long long)i);
if(i==1)
{
dp[j]=1;
}
}
}
}
for(int i=1;i<=n;i++)
{
qs[i]=qs[i-1]+dp[i];
//cout<<ml[i]<<" "<<mr[i]<<"\n";
}
// for(int j=1;j<=n;j++)
// {
// cout<<dp[j]<<" ";
// }
// cout<<"\n";
for(int i=2;i<=k;i++)
{
for(int j=1;j<=n;j++)
{
if(ml[j]>mr[j])
{
dp[j]=0;
continue;
}
else
{
dp[j]=qs[mr[j]-1]%mod-qs[max((long long)0,ml[j]-2)]%mod;
dp[j]=dp[j]%mod;
}
}
for(int j=1;j<=n;j++)
{
//cout<<dp[j]<<" ";
qs[j]=qs[j-1]+dp[j]%mod;
qs[j]=qs[j]%mod;
}
//cout<<"\n";
}
cout<<dp[n]%mod;
return 0;
}
/*
8 3 2
7 9 1 3 3 6 2 9
4 64
0 1 4 9 16 25 36 49 64
0 1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0 0 0
1 0 0 1 1 1 0 0 0 0
2 0 0 0 0 0 1 2 1 0
3 0 0 0 0 0 0 1 1 3
*/