Cod sursa(job #3210201)

Utilizator AndreidreiGresoiu Liviu-Andrei Andreidrei Data 5 martie 2024 13:37:42
Problema Padure2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva ICPC Marime 1.46 kb
#include <bits/stdc++.h>
#include <cstring>
#include <cstdio>
#pragma GCC optimize ("O3")
#define din cin
#define dout out
#define pi 3.14159265359
#define sw(x,y) x^=y,y^=x,x^=y
#define bmin(a,b)((a<b)?(a):(b))
#define bmax(a,b)((a>b)?(a):(b))
#define bminify(a,b)a=bmin(a,b)
#define bmaxify(a,b)a=bmax(a,b)
#define fto(i,ii,n)for(i=ii;i<n;i++)
#define f first
#define s second
#define mod 2000003ll
#define nmax 1000002
#define lim 351
using namespace std;
typedef long long ll;
ifstream in("padure2.in");
ofstream out("padure2.out");
//FILE *fin=fopen("infasuratoare.in","r");
//FILE *fout=fopen("infasuratoare.out","w");
ll n,m,p,f[nmax]={1},fi[nmax]={1},i,j,k,l,d[nmax],s,x,y;
pair<int,int>c[nmax];
int main()
{
fto(i,1,nmax){
    f[i]=i*f[i-1]%mod,fi[i]=1;
    for(j=1<<30;j;j/=2)
        if((mod-2)&j)
            fi[i]=fi[i]*fi[i]%mod*f[i]%mod;
            else fi[i]=fi[i]*fi[i]%mod;
}
in>>n>>m>>p;
//sw(n,m);
fto(i,0,p)in>>c[i].f>>c[i].s,--c[i].f,--c[i].s;
//s=f[n+m-2]*fi[n-1]%mod*fi[n-1]%mod;
c[p++]=make_pair(n-1,m-1);
sort(c,c+p);
fto(i,0,p){
    d[i]=f[c[i].f+c[i].s]*fi[c[i].f]%mod*fi[c[i].s]%mod;
    //cout<<c[i].f<<' '<<c[i].s<<' '<<d[i]<<' ';
    for(j=0;j<i;j++)
        if(c[i].s>=c[j].s)
            x=c[i].f-c[j].f,y=c[i].s-c[j].s,d[i]=(d[i]+d[j]*(mod-f[x+y])%mod*fi[x]%mod*fi[y]%mod)%mod;
    //cout<<d[i]<<'\n';
    //s=(s+(mod-d[i])*f[n+m-2-c[i].f-c[i].s]%mod*fi[n-1-c[i].f]%mod*fi[m-1-c[i].s])%mod;
}
out<<d[p-1];
}