Cod sursa(job #1710671)

Utilizator iulianrotaruRotaru Gheorghe-Iulian iulianrotaru Data 29 mai 2016 16:31:56
Problema Padure2 Scor 0
Compilator cpp Status done
Runda Arhiva ICPC Marime 0.8 kb
#include <fstream>
#include <algorithm>
#define x first
#define y second
using namespace std;
const int MOD=2000003;
int i,j,h,w,n,b[1<<20],c[1<<20],d[1<<20],e[1<<20];
pair <int,int> a[1<<10];
ifstream f("padure2.in");
ofstream g("padure2.out");
int ceoi(int q,int w)
{
	return 1LL*b[q+w]*c[w]%MOD*c[q]%MOD;
}
int main()
{
	f>>h>>w>>n;
	d[1]=b[0]=c[0]=1;
	int m=h+w;
	for(i=2;i<=m;++i) d[i]=1LL*(MOD/i)*(MOD-d[MOD%i])%MOD;
	for(i=1;i<=m;++i) c[i]=1LL*c[i-1]*d[i]%MOD;
	for(i=1;i<=m;++i) b[i]=1LL*b[i-1]*i%MOD;
	for(i=1;i<=n;++i) f>>a[i].x>>a[i].y;
	a[++n]={h,w};
	sort(a+1,a+n+1);
	for(i=1;i<=n;++i)
    {
		for(j=1;j<i;++j)
			if(a[j].y<=a[i].y) e[i]=(-ceoi(a[i].x-a[j].x,a[i].y-a[j].y)*1LL*e[j]+e[i])%MOD;
		e[i]=(e[i]+ceoi(a[i].x-1,a[i].y-1)+MOD)%MOD;
	}
	g<<e[n];
	return 0;
}