mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
76 lines
2.3 KiB
C++
76 lines
2.3 KiB
C++
|
#include <iostream>
|
||
|
#include <stdio.h>
|
||
|
#include <string.h>
|
||
|
using namespace std;
|
||
|
#define MAXN 55
|
||
|
#define DANGEROUS 0
|
||
|
#define SAFE 1
|
||
|
struct status
|
||
|
{
|
||
|
int x, y;
|
||
|
string direction;
|
||
|
};
|
||
|
int grid[MAXN][MAXN], width, height;
|
||
|
bool move(status & s, string instructions)
|
||
|
{
|
||
|
status last;
|
||
|
for (int i = 0; i < instructions.length(); i++)
|
||
|
{
|
||
|
last = s;
|
||
|
if (s.direction == "N" && instructions[i] == 'L')
|
||
|
s.direction = "W";
|
||
|
else if (s.direction == "N" && instructions[i] == 'R')
|
||
|
s.direction = "E";
|
||
|
else if (s.direction == "N" && instructions[i] == 'F')
|
||
|
s.y += 1;
|
||
|
else if (s.direction == "S" && instructions[i] == 'L')
|
||
|
s.direction = "E";
|
||
|
else if (s.direction == "S" && instructions[i] == 'R')
|
||
|
s.direction = "W";
|
||
|
else if (s.direction == "S" && instructions[i] == 'F')
|
||
|
s.y -= 1;
|
||
|
else if (s.direction == "W" && instructions[i] == 'L')
|
||
|
s.direction = "S";
|
||
|
else if (s.direction == "W" && instructions[i] == 'R')
|
||
|
s.direction = "N";
|
||
|
else if (s.direction == "W" && instructions[i] == 'F')
|
||
|
s.x -= 1;
|
||
|
else if (s.direction == "E" && instructions[i] == 'L')
|
||
|
s.direction = "N";
|
||
|
else if (s.direction == "E" && instructions[i] == 'R')
|
||
|
s.direction = "S";
|
||
|
else if (s.direction == "E" && instructions[i] == 'F')
|
||
|
s.x += 1;
|
||
|
if (s.x > width || s.x < 0 || s.y > height || s.y < 0)
|
||
|
{
|
||
|
if (grid[last.y][last.x] == DANGEROUS)
|
||
|
s = last;
|
||
|
else
|
||
|
{
|
||
|
cout << last.x << " " << last.y << " " << last.
|
||
|
direction;
|
||
|
cout << " LOST" << endl;
|
||
|
grid[last.y][last.x] = DANGEROUS;
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
cout << s.x << " " << s.y << " " << s.direction << endl;
|
||
|
return false;
|
||
|
}
|
||
|
int main(int argc, char const *argv[])
|
||
|
{
|
||
|
status robot;
|
||
|
string line;
|
||
|
cin >> width >> height;
|
||
|
for (int i = 0; i <= height; i++)
|
||
|
for (int j = 0; j <= width; j++)
|
||
|
grid[i][j] = SAFE;
|
||
|
while (cin >> robot.x >> robot.y >> robot.direction)
|
||
|
{
|
||
|
cin >> line;
|
||
|
move(robot, line);
|
||
|
}
|
||
|
return 0;
|
||
|
}
|