제출 #1269521

#제출 시각아이디문제언어결과실행 시간메모리
1269521biank로봇 대회 (IOI23_robot)C++20
100 / 100
69 ms5892 KiB
#include "robot.h" #include <bits/stdc++.h> using namespace std; #define forsn(i, s, n) for (int i = int(s); i < int(n); i++) #define forn(i, n) forsn(i, 0, n) #define dforsn(i, s, n) for (int i = int(n) - 1; i >= int(s); i--) #define dforn(i, n) dforsn(i, 0, n) using vi = vector<int>; #define all(x) begin(x), end(x) enum { NOTHING = -4, BOUNDARY, OBSTACLE, BLANK, PATH, WEST, SOUTH, EAST, NORTH }; const int POS = 0; const string dir = "HWSEN"; pair<char, int> makeMove(int nxtDir) { return pair<char, int>{dir[nxtDir], nxtDir}; } int rev(int d) { return (d + 1) % 4 + 1; } int nxt(int d) { return d % 4 + 1; } pair<char, int> getMove(vi state) { forn(i, 5) state[i]--; bool isStart = state[WEST] == BOUNDARY && state[NORTH] == BOUNDARY; bool isEnd = state[EAST] == BOUNDARY && state[SOUTH] == BOUNDARY; if (state[POS] == BLANK) { if (isStart) { if (state[SOUTH] == BLANK) return makeMove(SOUTH); if (state[EAST] == BLANK) return makeMove(EAST); return {'-', NOTHING}; } if (isEnd) return {'H', EAST}; forsn(nxtDir, 1, 5) if (state[nxtDir] == rev(nxtDir)) return makeMove(nxtDir); return {'-', NOTHING}; } if (state[POS] <= PATH) return {'-', NOTHING}; assert(WEST <= state[POS] && state[POS] <= NORTH); if (state[state[POS]] == rev(state[POS])) { int nxtDir = nxt(state[POS]); while (state[nxtDir] != BLANK && state[nxtDir] != rev(nxtDir)) nxtDir = nxt(nxtDir); return makeMove(nxtDir); } forsn(nxtDir, 1, 5) if (state[nxtDir] == rev(nxtDir)) return {dir[nxtDir], state[POS]}; if (isStart || count(all(state), PATH) > 0) return {isEnd ? 'T' : dir[state[POS]], PATH}; return {dir[state[POS]], BLANK}; } void program_pulibot() { vi s(5); #define rep(i) for (s[i] = -2; s[i] <= 5; s[i]++) rep(0) rep(1) rep(2) rep(3) rep(4) { auto [A, Z] = getMove(s); if (Z != NOTHING) set_instruction(s, Z + 1, A); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...