Pagini recente » Cod sursa (job #2256480) | Cod sursa (job #3286219) | Cod sursa (job #575585) | Borderou de evaluare (job #2421000) | Cod sursa (job #467061)
Cod sursa(job #467061)
#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;
}