Cod sursa(job #467013)

Utilizator tranbachhaiTran Bach Hai tranbachhai Data 28 iunie 2010 10:56:16
Problema Pod Scor 15
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 2 Marime 1.26 kb
#include<stdio.h>
#include<algorithm>
#define NMAX 20000010
#define p 9901
using namespace std;
//inm matrici prea lung 200 rand
/*
int sec,n,m,k,gaur[NMAX],mat[31][NMAX][NMAX],sir[3][NMAX],m[NMAX][NMAX],answer[NMAX],ras[NMAX][2*NMAX];

void top1(el)
{
int i;
	for (i=1;i<=k;++i)
		if (sir[2][el-1]<sir[1][el]+i-k-1 || sir[1][el-1]>sir[1][el]+i-k-1){ras[el][i]=0;}
		else ras[el][i]=ras[el-1][k-i+1];
}


void prel(int el)
{
	top1(el);
}

int main()
{
	freopen("pod.in","r",stdin);
	freopen("pod.out","w",stdout);
	
	scanf("%d%d%d",&n,&m,&k);
	gaur[1]=0;gaur[m+2]=n+1;
	for (i=1;i<=m;++i)
		scanf("%d",&gaur[i+1]);
	sor(gaur+1,gaur+m+3);
	for (i=1;i<=m+1;++i)
		if ( gaur[i]+1!=gaur[i+1])
			{sir[++sec][1]=gaur[i]+1;sir[sec][2]=gaur[i+1]-1;}
	for (i=1;i<=sec;++i)
		prel(i);
	return 0;
}
*/
int n,m,k,mat[NMAX];
int main()
{
int i,temp;
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",&temp);
	mat[temp]=-1;
	}
for (i=0;i<k;++i)
	if (mat[i]!=-1)
		mat[i]=1;
for (i=k;i<=n;++i)
	if (mat[i]!=-1)
		{
		mat[i]=mat[i-1]+mat[i-k];
		if (mat[i-1]==-1)
			++mat[i];
		if (mat[i-k]==-1)
			++mat[i];
		mat[i]=mat[i]%p;
		}
printf("%d",mat[n]);
return 0;
}