Cod sursa(job #1709695)

Utilizator CodeFxSAPIENTIA CodeFx CodeFx Data 28 mai 2016 13:28:27
Problema Padure2 Scor 0
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.23 kb
#include<stdio.h>
#include<iostream>
#include <string.h>
#include<time.h>

using namespace std;

typedef struct {
	int i, j;
}KOORD;

#define MOD 2000003L

int cmp(const void *, const void *);

int main() {
	long long i, j, z, N, M;
	int C;
	freopen("padure2.in", "r", stdin);
	freopen("padure2.out", "w", stdout);
	long long *apa, *fiu, *tmp;
	cin >> N >> M >> C;
	apa = new long long[M + 1];
	fiu = new long long[M + 1];
	for (i = 0; i <= M; ++i) {
		apa[i] = 1;
	}
	KOORD *gomba;
	gomba = new KOORD[C];
	for (i = 0; i < C; ++i) {
		cin >> gomba[i].i >> gomba[i].j;
		--gomba[i].i;
		--gomba[i].j;
	}
	qsort(gomba, C, sizeof(KOORD), cmp);
	z = 0;
	//memset(apa, 1, M);
	for (i = 1; i < N ; ++i) {
		fiu[0] = 1;
		for (j = 1; j < M; ++j) {
			if (z < C &&i == gomba[z].i && j == gomba[z].j) {
				fiu[j] = 0;
				++z;
			}
			else {
				fiu[j] = (apa[j] + fiu[j - 1]) % MOD;
			}
		}
		tmp = apa;
		apa = fiu;
		fiu = tmp;
	}
	printf("%lld\n", apa[M - 1]);
	return 0;
}

int cmp(const void *p, const void *q) {
	KOORD a = *(KOORD *)p, b = *(KOORD *)q;
	if (a.i < b.i) return -1;
	else
		if (a.i == b.i) {
			if (a.j < b.j) return -1;
			else
				return 1;
		}
		else {
			return 1;
		}
}