Cod sursa(job #467061)

Utilizator stocarulCosmin-Mihai Tutunaru stocarul Data 28 iunie 2010 11:14:53
Problema Pod Scor 15
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 2 Marime 0.9 kb
#include<cstdio>
#include<algorithm>
#define infile "pod.in"
#define outfile "pod.out"
#define modulo 9901
#define nmax 1000013
#define mmax 1013

using namespace std;

int dp[nmax]; //dp[i]=in cate feluri pot ajunge pana la i
int del[mmax]; //scandurile lipsa
int n; //numarul total de scandur
int m; //numarul de scanduri lipsa
int k; //lungimea sariturii

void read()
{
	int i;
	scanf("%d %d %d\n",&n,&m,&k);
	for(i=1;i<=m;++i)
		scanf("%d",&del[i]);
}

void init()
{
	//de unde plecam
	dp[0]=1;

	//sortam scandurile
	sort(del+1,del+m+1);
}

void solve()
{
	int i,j;

	//facem dinamica
	for(i=j=1;i<=n;++i)
		if(del[j]==i)
			dp[i]=0, ++j;
		else
		{	
			dp[i]=dp[i-1];
			if(i-k>=0) dp[i]=(dp[i]+dp[i-k])%modulo;
		}
}

void write()
{
	printf("%d\n",dp[n]);
}

int main()
{
	freopen(infile,"r",stdin);
	freopen(outfile,"w",stdout);

	read();
	init();
	solve();
	write();

	fclose(stdin);
	fclose(stdout);
	return 0;
}