Pagini recente » Cod sursa (job #1938490) | Cod sursa (job #2077687) | Cod sursa (job #2980510) | Cod sursa (job #123648) | Cod sursa (job #467285)
Cod sursa(job #467285)
#include <cstdio>
#include <ctime>
#include <stdlib.h>
#define mod 9901
#define kpart 50
#define NMAX 1005
int n, m, k, a, cnt,i;
int res, dp[NMAX],j, A[NMAX], dpsteps[NMAX], firstk, lastk;
using namespace std;
int main ()
{
freopen ("pod.in", "r", stdin);
freopen ("pod.out", "w", stdout);
scanf ("%d%d%d\n", &n, &m, &k);
for (i = 1; i <= m; i++)
{
scanf ("%d", &A[i]);
if (A[i] == n)
{
printf ("0\n");
return 0;
}
}
int CNT = 1;
firstk = 1;
lastk = 1;
dp[0] = 1; int pas = 1, past = 0;
while (pas <= n)
{
//int aux = pas;
for (i = CNT; i <= kpart && pas <= n; i++)
{
++pas;
while (A[firstk] < i - 1 && firstk < m)
++firstk;
if (A[firstk] != i - 1 || firstk > m)
dp[i] = dp[i - 1];
if (pas - k >= 0 && k != 1)
{
if (i - k == A[lastk] && lastk <= m) ++lastk;
else
dp[i] = (dp[i] + dp[i - k]) % mod;
}
// printf ("%d ", dp[i]);
}
// printf (" %d\n", pas);
if (i <= kpart)
past = i - 1;
else past = kpart;
if (pas > n) break;
CNT = 0;
//printf ("%d\n", past);
for (i = kpart - k; i <= kpart; i++)
dp[CNT++] = dp[i];
}
printf ("%d\n", dp[past] % mod);
return 0;
}