Pagini recente » Cod sursa (job #457378) | Cod sursa (job #2080177) | Cod sursa (job #634407) | Cod sursa (job #2378135) | Cod sursa (job #467105)
Cod sursa(job #467105)
#include<algorithm>
#include<vector>
using namespace std;
#define MOD 9901
#define MOD1 31
int n,m,k,i,x;
int lipsa[1005];
int ind1,indk,indi;
int a[36];
int i1=0,ik=0,ii;
int main()
{
freopen("pod.in","r",stdin);
freopen("pod.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for(i=1;i<=m;i++)
scanf("%d",&lipsa[i]);
sort(lipsa+1,lipsa+m+1);
if(lipsa[m]==n)
{
printf("0\n");
return 0;
}
lipsa[m+1]=(1<<30);
ind1=indk=indi=1;
a[1]=a[k]=1;
for(i=1;i<=n;i++)
{
ii=i&MOD1;
if(i>k)
a[ii]=0;
if(lipsa[indi]==i)
{
indi++;
continue;
}
i1=(i-1)>0?(i-1)&MOD1:0;
ik=(i-k)>0?(i-k)&MOD1:0;
if(lipsa[ind1]==i-1)
ind1++;
else
{
a[ii]+=a[i1];
if(a[ii]>MOD)
a[ii]-=MOD;
}
if(lipsa[indk]==i-k)
indk++;
else
{
a[ii]+=a[ik];
if(a[ii]>MOD)
a[ii]-=MOD;
}
}
printf("%d\n",a[(n&MOD1)]);
return 0;
}