Cod sursa(job #1709754)

Utilizator UAIC_RIP_Han_SoloUAIC BotoIasiByte UAIC_RIP_Han_Solo Data 28 mai 2016 13:45:35
Problema Padure2 Scor 0
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.99 kb
#include <bits/stdc++.h>
#include <algorithm>

#define pb push_back
#define mp make_pair
#define mt make_tuple
#define ll long long
#define pii pair<int,int>
#define tii tuple <int,int,int>
#define N 1000005
#define mod 2000003
#define X first
#define Y second
#define eps 0.0000000001
#define all(x) x.begin(),x.end()
#define tot(x) x+1,x+n+1
using namespace std;

struct pack {
    int lin, col;
    };
struct pack C[1001];

int A[2][N], n, m, nrC;

void citire();
void solve();
bool comp (const struct pack&, const struct pack&);


string file="";

int main()
{
    freopen("padure2.in","r",stdin);
    freopen("padure2.out","w",stdout);
    citire();
    sort (C+1, C+nrC+1, comp);
    solve();
    return 0;
}

bool comp (const struct pack &a, const struct pack &b)
{
    return (a.lin<b.lin || (a.lin==b.lin && a.col<b.col));
}

void citire()
{
    int i;
    cin>>n>>m;
    cin>>nrC;
    for (i=1; i<=nrC; ++i)
        cin>>C[i].lin>>C[i].col;
    return;
}

void solve()
{
    int lprec=0, lcrt=1, crt, ciuperca=1, i;
    //initializare
    for (crt=1; crt<=m; ++crt)//prima linie
        {
        A[0][crt]=1;
        if (C[ciuperca].lin==1  && C[ciuperca].col==crt && ciuperca<=nrC)
            {
                A[0][crt]=0;
                ++ciuperca;
            }
        }

    for (crt=2; crt<=n; ++crt)
    {
        A[lcrt][1]=1;
        if (C[ciuperca].lin==crt  && C[ciuperca].col==1 && ciuperca<=nrC)
        {
            A[lcrt][1]=0;
            ++ciuperca;
        }
        for (i=2; i<=m; ++i)
        {
            A[lcrt][i]=(A[lcrt][i-1]+A[lprec][i]);
            if (A[lcrt][i]>=mod)
                A[lcrt][i]-=mod;

            if (C[ciuperca].lin==crt  && C[ciuperca].col==i && ciuperca<=nrC)
                {
                    A[lcrt][i]=0;
                    ++ciuperca;
                }
        }
        lcrt=1-lcrt;
        lprec=1-lprec;
    }

    cout<<A[lprec][m]<<"\n";
    return;

}