Cod sursa(job #1710010)

Utilizator ALL10iUPB ALL10i ALL10i Data 28 mai 2016 14:45:59
Problema Padure2 Scor 0
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.13 kb
#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;

		for (int j = 1; j < m; ++j) {
			if(ciup[j] == 1) 
				rows[j] = 0;
			else 
				rows[j] = (rows[j - 1] + rows[j]) % 2000003;
		}
	}

	out << rows[m - 1] << '\n';

	return 0;
}