/* [NWERC'08] WILDWATER RAFTING by: Jan Kuipers */ using namespace std; #include #include #include #include struct point { int x,y; }; point operator - (point p, point q) { return (point) {p.x-q.x, p.y-q.y}; } int operator * (point p, point q) { return p.x*q.x + p.y*q.y; } int operator ^ (point p, point q) { return p.x*q.y - p.y*q.x; } double dist (point p, point q1, point q2) { if ((p-q1)*(q2-q1) < 0) return sqrt((p-q1)*(p-q1)); if ((p-q2)*(q1-q2) < 0) return sqrt((p-q2)*(p-q2)); return abs((p-q1)^(q2-q1)) / sqrt((q2-q1)*(q2-q1)); } vector readpolygon() { int N; cin>>N; vector p(N); for (int i=0; i>p[i].x>>p[i].y; return p; } int main () { int runs; cin>>runs; while (runs--) { vector p1 = readpolygon(); vector p2 = readpolygon(); double res = 1e100; for (int i=0; i