/*
	© MATTO MATTI 2019
	http://mattomatti.com/pl/a0279
	napisane przy użyciu Visual Studio Community 2015
	2019-07-18 v 1.0
*/

#include <iostream>
#include <vector>

using namespace std;

typedef pair<double, double> Punkt;

double Obliczd(Punkt A, Punkt B, Punkt P) {
	return (P.first - A.first) * (B.second - A.second)
		- (P.second - A.second) * (B.first - A.first);
}

bool CzyCzescWspolna(vector<Punkt> wielokat1, vector<Punkt> wielokat2) {
	int n1 = wielokat1.size();
	double x_sr = 0, y_sr = 0;
	for (int i = 0; i < n1; i++) {
		x_sr += wielokat1[i].first;
		y_sr += wielokat1[i].second;
	}
	Punkt srodek = make_pair(x_sr / n1, y_sr / n1);
	double * wyniki = new double[n1];
	for (int i = 0; i < n1; i++) {
		wyniki[i] = Obliczd(wielokat1[i], wielokat1[(i + 1) % n1], srodek);
	}
	double d; Punkt p;
	for (int j = 0; j < wielokat2.size(); j++) {
		bool wewnatrz = true;
		p = wielokat2[j];
		for (int i = 0; i < wielokat1.size(); i++) {
			d = Obliczd(wielokat1[i], wielokat1[(i + 1) % n1], p);
			if (d * wyniki[i] < 0) {
				wewnatrz = false;
				break;
			}
		}
		if (wewnatrz) {
			return true;
		}
	}
	return false;
}

vector<Punkt> WczytajWielokat(int k = 1) {
	int n;
	cout << "Ile bokow ma wielokat " << k << "?\n k = ";
	cin >> n;
	cout << "Podaj punkty:" << endl;
	vector<Punkt> punkty;
	double x, y;
	for (int i = 0; i < n; i++) {
		cin >> x >> y;
		punkty.push_back(make_pair(x, y));
	}
	return punkty;
}

int main() {
	vector<Punkt> wielokat1 = WczytajWielokat(1);
	vector<Punkt> wielokat2 = WczytajWielokat(2);
	bool wspolna_czesc = CzyCzescWspolna(wielokat1, wielokat2);
	cout << (wspolna_czesc ? "Istnieje" : "Nie istnieje");
	system("pause");
	return 0;
}