Wednesday, May 13, 2015

UVa 10713 - Map

// UVa 10713 - Map
// code by danile53 and arpo

#include <iostream>
#include <math.h>
#include <stdio.h>
#include <cmath>
#include <vector>
#include <map>
using namespace std;

typedef pair<string, double> pa;
const double epsilon = 1e-10;

double dist(double x, double y) {
	return sqrt(x * x + y * y);
}

string move(double x1, double y1, double x2, double y2) {
	string dir = "";
	double dx = abs(x2 - x1);
	double dy = abs(y2 - y1);
	if (dy >= epsilon)
		dir += (y2 > y1 ? "north" : "south");
	if (dx >= epsilon)
		dir += (x2 > x1 ? "east" : "west");
	if (dir != "") {
		cout << dir;
		printf(" %.10lf\n", dist(dx, dy));
	}
	return dir;
}

int main() {
	bool first = true;
	while (true) {
		double r, x, y, X, Y;
		cin >> r;
		if (r == -1)
			break;
		if (!first)
			cout << endl;
		else
			first = false;
		cin >> x >> y >> X >> Y;

		double dx = abs(x - X);
		double dy = abs(y - Y);
		double dd = min(dx, dy);

		double xmid = x + dd * (X > x ? 1 : -1);
		double ymid = y + dd * (Y > y ? 1 : -1);
		if (dist(xmid, ymid) >= r) {
			xmid = X - dd * (X > x ? 1 : -1);
			ymid = Y - dd * (Y > y ? 1 : -1);
		}

		move(x, y, xmid, ymid);
		move(xmid, ymid, X, Y);
	}
	return 0;
}

No comments:

Post a Comment