Pagini recente » Cod sursa (job #1056044) | Cod sursa (job #1572574) | Cod sursa (job #1621320) | Cod sursa (job #173842) | Cod sursa (job #466968)
Cod sursa(job #466968)
#include <cstdio>
#include <cassert>
#include <algorithm>
#include <cmath>
#define Nmax 1005
#define mod 9901
#define InFile "pod.in"
#define OutFile "pod.out"
using namespace std;
int n, m, k;
int T[Nmax], Sc[Nmax];
void read();
void solve();
void write();
int binara (int x);
int main()
{
assert (freopen (InFile, "r", stdin));
assert (freopen (OutFile, "w", stdout));
read();
sort (Sc, Sc+m);
solve();
write();
return 0;
}
void read()
{
int i;
scanf("%d %d %d\n", &n, &m, &k);
for (i=0; i<m; i++)
scanf("%d ", &Sc[i]);
}
void solve ()
{
int i, rez, poz, r;
T[0]=1;
for (i=1; i<=n; i++)
{
//caz in care fac un pas
rez=0;
poz=(i%1000-1)>=0?i%1000-1:1000-1;
r=binara(poz);
if (r==-1) rez=(rez+T[poz])%mod;
//caz in care fac k pasi
poz=(i%1000-k)>=0?i%1000-k:1000-(int)abs(i%1000-k);
r=binara (poz);
if (r==-1) rez=(rez+T[poz])%mod;
T[i%1000]=rez;
}
}
int binara(int x)
{
int st=0, dr=m-1, mij;
while (st<=dr)
{
mij=st+(dr-st)/2;
if (Sc[mij]==x)
return mij;
else
if (Sc[mij]>x)
dr=mij-1;
else
st=mij+1;
}
return -1;
}
void write()
{
printf ("%d\n", T[n%1000]);
}