This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "robot.h"
#include <bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for(int i=(a),_##i##_b=(b); i<=_##i##_b; i++)
void subtask3() {
const int MAX_COLOR = 10;
const int BOUNDARY = -2;
const int BLOCKED = -1;
const int FINAL = 1;
const int TRY_EAST = 2;
const int TRY_SOUTH = 3;
const int TRY_WEST = 4;
const int TRY_NORTH = 5;
const int BACKTRACK = 6;
const int TO_CLEAN_UP = 7;
const int CLEAN_RIGHT = 8;
const int CLEAN_DOWN = 9;
#define SET(color, action) { set_instruction(state, color, action); continue; }
FOR(cur,0,MAX_COLOR) FOR(west,-2,MAX_COLOR) FOR(south,-2,MAX_COLOR) FOR(east,-2,MAX_COLOR) FOR(north,-2,MAX_COLOR) {
vector<int> state {cur, west, south, east, north};
// Clean up
if (cur == CLEAN_DOWN) {
if (south == 0) {
if (north == CLEAN_DOWN) SET(0, 'N')
else SET(CLEAN_RIGHT, 'H');
}
}
if (cur == TO_CLEAN_UP) {
if (west == FINAL) SET(CLEAN_RIGHT, 'H');
if (north == CLEAN_DOWN) {
if (east == TO_CLEAN_UP) SET(CLEAN_RIGHT, 'H');
if (south == TO_CLEAN_UP) SET(CLEAN_DOWN, 'S');
SET(0, 'N');
}
if (west == CLEAN_RIGHT) {
SET(CLEAN_RIGHT, 'H');
}
}
if (cur == CLEAN_RIGHT) {
if (south == TO_CLEAN_UP) SET(CLEAN_DOWN, 'S');
if (east == TO_CLEAN_UP) SET(CLEAN_RIGHT, 'E');
if (north == CLEAN_DOWN) SET(0, 'N');
SET(0, 'W');
}
// Found target
if (cur == FINAL) {
if (east == TO_CLEAN_UP) SET(FINAL, 'E');
if (north > 1) SET(FINAL, 'N');
if (west > 1) SET(FINAL, 'W');
if (south > 1) SET(FINAL, 'S');
if (east > 1) SET(FINAL, 'E');
SET(FINAL, 'T');
}
if ((south == BOUNDARY && east == BOUNDARY) || west == FINAL || south == FINAL || east == FINAL || north == FINAL) {
SET(FINAL, 'H');
}
if (cur == 0) SET(TRY_EAST, 'H');
if (cur == TRY_EAST) SET(TRY_SOUTH, east == 0 ? 'E' : 'H');
if (cur == TRY_SOUTH) SET(BACKTRACK, south == 0 ? 'S' : 'H');
// if (cur == TRY_WEST) SET(TRY_NORTH, west == 0 ? 'W' : 'H');
// if (cur == TRY_NORTH) SET(BACKTRACK, north == 0 ? 'N' : 'H');
if (cur == BACKTRACK) {
if (north > 0) SET(TO_CLEAN_UP, 'N');
if (west > 0) SET(TO_CLEAN_UP, 'W');
if (south > 0) SET(TO_CLEAN_UP, 'S');
if (east > 0) SET(TO_CLEAN_UP, 'E');
}
}
}
void program_pulibot() {
subtask3();
}
Compilation message (stderr)
robot.cpp: In function 'void subtask3()':
robot.cpp:11:15: warning: unused variable 'BLOCKED' [-Wunused-variable]
11 | const int BLOCKED = -1;
| ^~~~~~~
robot.cpp:17:15: warning: unused variable 'TRY_WEST' [-Wunused-variable]
17 | const int TRY_WEST = 4;
| ^~~~~~~~
robot.cpp:18:15: warning: unused variable 'TRY_NORTH' [-Wunused-variable]
18 | const int TRY_NORTH = 5;
| ^~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |