Saturday, June 6, 2015

UVa 118 - Mutant Flatworld Explorers

// UVa 118 - Mutant Flatworld Explorers

#include <string>
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;

int maxx, maxy;

int move[4][2] = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } };

int to_int(char ch) {
	if (ch == 'N')
		return 0;
	else if (ch == 'E')
		return 1;
	else if (ch == 'S')
		return 2;
	else
		return 3;
}

char to_char(int d) {
	if (d == 0)
		return 'N';
	else if (d == 1)
		return 'E';
	else if (d == 2)
		return 'S';
	else
		return 'W';
}

int main() {
	cin >> maxx >> maxy;
	int x, y;
	bool lost[51][51];
	memset(lost, false, sizeof(lost));
	while (cin >> x >> y) {
		string l;
		cin >> l;
		int d = to_int(l[0]);
		cin >> l;
		bool dead = false;
		for (int i = 0; i < l.size(); i++) {
			if (l[i] == 'R')
				d = (d + 1) % 4;
			else if (l[i] == 'L')
				d = (d + 3) % 4;
			else {
				x += move[d][0];
				y += move[d][1];
				if (x < 0 || x > maxx || y < 0 || y > maxy) {
					x -= move[d][0];
					y -= move[d][1];
					if (!lost[x][y]) {
						lost[x][y] = true;
						dead = true;
						break;
					}
				}
			}
		}
		if (dead)
			printf("%d %d %c LOST\n", x, y, to_char(d));
		else
			printf("%d %d %c\n", x, y, to_char(d));
	}
	return 0;
}

No comments:

Post a Comment