Pagini recente » Cod sursa (job #1023062) | Cod sursa (job #3281007) | Cod sursa (job #2693525) | Cod sursa (job #384470) | Cod sursa (job #1710059)
#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_map>
#include <string.h>
using namespace std;
ifstream in("padure2.in");
ofstream out("padure2.out");
int main() {
int n, m, mushes;
unordered_map<int, vector<int> > mushrooms;
in >> n >> m >> mushes;
int x, y;
for (int i = 0; i < mushes; ++i) {
in >> x >> y;
if ((x == 1) && (y == 1)) {
out << "0\n";
return 0;
}
if ((x == n) && (y == m)) {
out << "0\n";
return 0;
}
--x; --y;
mushrooms[x].push_back(y);
}
int rows[m];
int ciup[m];
memset(ciup, 0, m * sizeof(int));
memset(rows, 0, m * sizeof(int));
rows[0] = 1;
for (int i = 0; i < mushrooms[0].size(); ++i)
ciup[mushrooms[0][i]] = 1;
for (int i = 1; i < m; ++i)
if (ciup[i] == 0)
rows[i] = 1;
else
break;
for (int i = 1; i < n; ++i) {
memset(ciup, 0, m * sizeof(int));
for (int j = 0; j < mushrooms[i].size(); ++j)
ciup[mushrooms[i][j]] = 1;
if (ciup[0] == 1)
rows[0] = 0;
int *val_ciup = &(ciup[1]);
int *rows_ciup = &(rows[1]);
for (int j = 1; j < m; ++j, ++val_ciup, ++rows_ciup) {
if(*val_ciup == 1)
*rows_ciup = 0;
else
*rows_ciup = (*(rows_ciup - 1) + *rows_ciup) % 2000003;
}
}
out << rows[m - 1] << '\n';
return 0;
}