Pagini recente » Cod sursa (job #3215074) | Cod sursa (job #1181552) | Cod sursa (job #815740) | Cod sursa (job #2008152) | Cod sursa (job #467046)
Cod sursa(job #467046)
#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[40];
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);
int t=0;
ind1=indk=indi=1;
a[1]=a[k]=1;
x=3*k;
int i1=0,ik=0,ii;
for(i=1;i<=n;i++)
{
i1=0; ik=0;
ii=i&MOD1;
if(i>k)
a[ii]=0;
if(lipsa[indi]==i)
{
indi++;
continue;
}
if(i-1>0)
i1=(i-1)&MOD1;
if(i-k>0)
ik=(i-k)&MOD1;
ii=i&MOD1;
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;
}
if(t==0&&a[ii])
t=1;
if(i>x&&t==0)
{
printf("0\n");
return 0;
}
}
printf("%d\n",a[(n&MOD1)]);
return 0;
}