Pagini recente » Cod sursa (job #990494) | Cod sursa (job #2812292) | Cod sursa (job #215902) | Cod sursa (job #2657827) | Cod sursa (job #1709815)
#include <stdio.h>
#include <string.h>
#include <set>
using namespace std;
set< pair<int, int> > mushrooms;
int n, m;
int v1[1000005], v2[1000005];
int main (void) {
freopen("padure2.in", "r", stdin);
freopen("padure2.out", "w", stdout);
scanf("%d %d", &n, &m);
int nr_ciup;
scanf("%d", &nr_ciup);
for (int i = 0; i < nr_ciup; ++i) {
int x, y;
scanf("%d %d", &x, &y);
mushrooms.insert(make_pair(x, y));
}
v2[1] = 1;
if (mushrooms.find(make_pair(1, 1)) != mushrooms.end()) {
v2[1] = 0;
}
for (int i = 2; i <= n; ++i) {
if (v2[i - 1] == 0 || mushrooms.find(make_pair(i, 1)) != mushrooms.end()) {
v2[i] = 0;
} else {
v2[i] = 1;
}
}
int *current = v1, *prev = v2;
for (int j = 2; j <= m; ++j) {
current[1] = 1;
if (mushrooms.find(make_pair(1, j)) != mushrooms.end()) {
current[1] = 0;
}
for (int i = 2; i <= n; ++i) {
if (mushrooms.find(make_pair(i, j)) != mushrooms.end()) {
current[i] = 0;
} else {
current[i] = (current[i - 1] + prev[i]) % 2000003;
}
}
//memcpy(v2, v1, (n + 1) * sizeof(int));
int *aux = prev;
prev = current;
current = aux;
}
printf("%d", prev[n]);
return 0;
}