Cod sursa(job #1709371)

Utilizator ALL10iUPB ALL10i ALL10i Data 28 mai 2016 11:59:05
Problema Padure2 Scor 0
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <utility>
#include <set>
#include <unordered_set>
using namespace std;

ifstream in("padure2.in");
ofstream out("padure2.out");

struct pair_hash {
	    inline std::size_t operator()(const std::pair<int,int> & v) const {
			        return v.first*31+v.second;
					    }
};

int main() {
	int n, m, mushes;
	unordered_set<pair<int, int>, pair_hash> mushrooms;
	
	in >> n >> m >> mushes;
	int x, y;

	for (int i = 0; i < mushes; i++) {
		in >> x >> y;
		--x; --y;
		mushrooms.insert(make_pair(x, y));
	}

	int rows[2][m];
	int i_m, p_r = 0;

	rows[0][0] = 1;

	for (int i = 1; i < m; i++) {
		if (mushrooms.find(make_pair(0, i)) != mushrooms.end()) {
			rows[0][i] = 0;
		}
		else {
			rows[0][i] = rows[0][i - 1];
		}
	}

	for (int i = 1; i < n; i++) {
		i_m = p_r ^ 1;

		if (mushrooms.find(make_pair(i, 0)) != mushrooms.end()) {
			rows[i_m][0] = 0;
		}
		else {
			rows[i_m][0] = rows[p_r][0];
		}
		
		for (int j = 1; j < m; j++) {
			if (mushrooms.find(make_pair(i, j)) != mushrooms.end()) {
				rows[i_m][j] = 0;
			}
			else {
				rows[i_m][j] = (rows[i_m][j - 1] + rows[p_r][j]) % 2000003;
			}
		}

		p_r ^= 1;
	}

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

	return 0;
}