Pagini recente » Cod sursa (job #3239500) | Cod sursa (job #2094470) | Cod sursa (job #1146681) | Cod sursa (job #921286) | Cod sursa (job #568893)
Cod sursa(job #568893)
#include<fstream>
#include<vector>
#include<list>
#define inf "pod.in"
#define outf "pod.out"
#define MOD 9901
#define KMax 30
#define MODH 666013
using namespace std;
fstream f(inf,ios::in),g(outf,ios::out);
int N, M, K;
int A[KMax];
vector<int> H[MODH];
inline int h(int x) { return x%MODH; }
inline void add(int x)
{
int poz = h(x);
H[poz].push_back(x);
}
inline bool is_in(int x)
{
int poz = h(x);
for(int i=0; i<H[poz].size(); i++)
if( H[poz][i] == x ) return true;
return false;
}
void read()
{
f>>N>>M>>K; int j;
for(int i=1; i<=M; i++) { f>>j; add(j); }
}
void solve()
{
int i=0, p1, p, p2; bool start = false;
while( i<N )
{
p = i%(K+1); A[p] = 0;
if( is_in(i+1) ) { A[p] = -1; i++; continue; }
if( !start ) A[p] = 1, start = true;
if( i-1<0 ) { i++; continue; }
p1 = (i-1) % (K+1);
if( !is_in(i) && A[p1]!=-1 ) A[p] += A[p1];
if( i-K < 0 ) { i++; continue; }
p2 = (i-K)%(K+1);
if( !is_in(i-K+1) && A[p2]!=-1 ) A[p] += A[p2];
//g<<A[p]<<endl;
A[p] %= MOD;
i++;
}
g<< A[ (N-1)%(K+1) ];
}
int main()
{
read(); solve();
f.close(); g.close();
return 0;
}