You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
808 B
C++
35 lines
808 B
C++
#include <cstdio>
|
|
#include <cstring>
|
|
#include <algorithm>
|
|
int a[100001];
|
|
int l,s,t,m;
|
|
bool bb[100001];
|
|
int f[100001];
|
|
inline int min(int a,int b)
|
|
{
|
|
return a<b?a:b;
|
|
}
|
|
int main()
|
|
{
|
|
memset(f,0x3f,sizeof(f));
|
|
scanf("%d%d%d%d",&l,&s,&t,&m);
|
|
for(int i=1; i<=m; i++)
|
|
scanf("%d",a+i);
|
|
a[m+1]=l;
|
|
std::sort(a,a+m+2);
|
|
int ans=0;
|
|
if(s==t) for(int i=1; i<=m; i++) ans+=(a[i]%s==0);
|
|
else
|
|
{
|
|
for(int i=1; i<m+2; i++) a[i]=a[i-1]+(a[i]-a[i-1])%90;
|
|
for(int i=1; i<=m; i++) bb[a[i]]=true;
|
|
for(int i=s; i<=t; i++) f[i]=bb[i];
|
|
for(int i=s*2; i<=a[m+1]; i++)
|
|
for(int j=s; j<=t; j++)
|
|
if(j<=i) f[i]=min(f[i],f[i-j])+bb[i];
|
|
ans=f[a[m+1]];
|
|
}
|
|
printf("%d",ans);
|
|
return 0;
|
|
}
|