Cod sursa(job #1709968)

Utilizator UTCN_rachetaUTCN Pocol Rogoz Oltean UTCN_racheta Data 28 mai 2016 14:37:44
Problema Padure2 Scor 0
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.45 kb
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#define MOD 2000003

using namespace std;
int N, M, C;

struct ciuperca
{
    int l,c;
};
vector<ciuperca> v;
int a[2][1000001];

bool cmp (ciuperca X, ciuperca Y)
{
    if (X . l != Y . l) return X . l < Y . l;
    if (X . l == Y . l) return (X . c < Y . c);
}

bool cmp2 (ciuperca X, ciuperca Y)
{
    if (X . l < Y . l) return 1;
    if (X . l == Y . l) return (X . c < Y . c);
}

bool isTree(int i, int j)
{
    vector<ciuperca>::iterator it;

    ciuperca pzm;
    pzm . l = i; pzm . c = j;
    bool FUTUI = binary_search (v.begin (), v.end (), pzm, cmp);
    return !FUTUI;

}



int main()
{
    FILE *fin, *fout;
    int i, j, k;
    ciuperca e;

    fin = fopen("padure2.in", "r");
    fout = fopen("padure2.out", "w");

    fscanf(fin, "%d %d %d", &N, &M, &C);
    for(i=1; i<=C; i++)
    {
        fscanf(fin, "%d %d", &e.l, &e.c);
        v.push_back(e);
    }

    sort (v.begin (), v.end (), cmp);

    a[0][M] = a[1][M] = 1;
    for(i=M-1; i>0; i--) a[N%2][i] = 1;

    for(i=N-1; i>0; i--)
    {
        k = (i+1)%2;
        for(j=M-1; j>0; j--)
        {
            if(isTree(i, j))
                a[i%2][j] = ( a[k][j] + a[i%2][j+1] ) % MOD;
            else
                a[i%2][j] = 0;
        }
    }

    fprintf(fout, "%d\n", a[1][1]);

    fclose(fin);
    fclose(fout);
    v.clear();
    return 0;
}