Cod sursa(job #475490)

Utilizator alex23alexandru andronache alex23 Data 7 august 2010 10:03:04
Problema Pod Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <iostream>
#include <deque>
#include <vector>
#include <algorithm>

using namespace std;

const int MOD = 9901;

deque<int> lastK;
vector<int> a;
int N, M, K, pozitieCurenta = 0, sumaLastK = 0;
int x1 = 0, x2 = 1;

FILE *f = fopen("pod.in", "r");
FILE *g = fopen("pod.out", "w");


deque<int>::iterator it;

int main()
{
    
    fscanf(f, "%d %d %d", &N, &M, &K);
    
    for (int i = 0; i < M; ++i)
    {
        int x;
        fscanf(f, "%d", &x);
        a.push_back(x);
    }
    
    sort(a.begin(), a.end());
    
    for (int i = 1; i < K; ++i)
    {
        if ((a[pozitieCurenta] == i) || x1)
        {
           lastK.push_back(0);
           if (a[pozitieCurenta] == i) pozitieCurenta++;
           x1 = 1;
        }
        else
        {
            lastK.push_back(1);
        }
    }
    
    if (a[pozitieCurenta] == K)
    {
        if (lastK.back())
        {
            lastK.push_back(1);
        }
        else
        {
            lastK.push_back(0);
        }
        pozitieCurenta++;
    }
    else
    {
        if (lastK.back())
        {
            lastK.push_back(2);
        }
        else
        {
            lastK.push_back(1);
        }
    }

    for (int i = K + 1; i <= N; ++i)
    {
        if (a[pozitieCurenta] == i)
        {
            lastK.push_back(0);
            pozitieCurenta++;
            lastK.pop_front();
        }
        else
        {
            lastK.push_back((lastK.front() + lastK.back()) % MOD);
            lastK.pop_front();
        }
    }
    
    fprintf(g, "%d", lastK.back());
    
    
    fclose(f);
    fclose(f);
    return 0;
}