Cod sursa(job #467097)

Utilizator rusu_raduRusu Radu rusu_radu Data 28 iunie 2010 11:29:42
Problema Pod Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 2 Marime 1.09 kb
#include <cstdio>
#include <cassert>
#include <algorithm>
#include <cmath>
#define Nmax 1000005
#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, a;
    scanf("%d %d %d\n", &n, &m, &k);
    for (i=0; i<m; i++)
        scanf("%d ", &a), Sc[a]=1;
}

void solve ()
{
    int i, rez, poz, r;
    T[0]=1;
    for (i=1; i<=n; i++)
        T[i]=(!Sc[i-1]?T[i-1]:0)+(!Sc[i-k]&&i-k>=0?T[i-k]:0);
}

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]);
}