제출 #1082539

#제출 시각아이디문제언어결과실행 시간메모리
1082539c2zi6로봇 대회 (IOI23_robot)C++17
78 / 100
125 ms6348 KiB
#define _USE_MATH_DEFINES #include <bits/stdc++.h> #define ff first #define ss second #define pb push_back #define all(a) (a).begin(), (a).end() #define replr(i, a, b) for (int i = int(a); i <= int(b); ++i) #define reprl(i, a, b) for (int i = int(a); i >= int(b); --i) #define rep(i, n) for (int i = 0; i < int(n); ++i) #define mkp(a, b) make_pair(a, b) using namespace std; typedef long long ll; typedef long double ld; typedef pair<int, int> PII; typedef vector<int> VI; typedef vector<PII> VPI; typedef vector<VI> VVI; typedef vector<VVI> VVVI; typedef vector<VPI> VVPI; typedef pair<ll, ll> PLL; typedef vector<ll> VL; typedef vector<PLL> VPL; typedef vector<VL> VVL; typedef vector<VVL> VVVL; typedef vector<VPL> VVPL; template<class T> T setmax(T& a, T b) {if (a < b) return a = b; return a;} template<class T> T setmin(T& a, T b) {if (a < b) return a; return a = b;} #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; template<class T> using indset = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; #include "robot.h" void solve(int CUR, int W, int S, int E, int N) { VI INSTRUCTION = {CUR, W, S, E, N}; int COLOR = 15; char DIRECTION = 'T'; auto move = [&](char ch) { DIRECTION = ch; if (ch == 'W') COLOR = 2; else if (ch == 'S') COLOR = 3; else if (ch == 'E') COLOR = 4; else if (ch == 'N') COLOR = 5; }; bool phase1 = false; if (CUR == 0) phase1 = true; if (CUR == 2 && W == 4) phase1 = true; if (CUR == 4 && E == 2) phase1 = true; if (CUR == 3 && S == 5) phase1 = true; if (CUR == 5 && N == 3) phase1 = true; if (phase1) { if (W == -2 && N == -2 && CUR == 0) { if (E >= 0) move('E'); else move('S'); } else if (E == -2 && S == -2) { DIRECTION = 'H'; COLOR = 4; } else { if (CUR == 0) { if (W == 4) move('W'); else if (S == 5) move('S'); else if (E == 2) move('E'); else if (N == 3) move('N'); } else { rep(_, 4) { if (CUR == 2) move('S'); else if (CUR == 3) move('E'); else if (CUR == 4) move('N'); else if (CUR == 5) move('W'); CUR = COLOR; if (DIRECTION == 'W') { if (W != 0 && W != 4) continue; } else if (DIRECTION == 'S') { if (S != 0 && S != 5) continue; } else if (DIRECTION == 'E') { if (E != 0 && E != 2) continue; } else if (DIRECTION == 'N') { if (N != 0 && N != 3) continue; } break; } } } } else { int ardyoq = 0; if (N == -2 && W == -2) ardyoq = 1; if (W == 1 || E == 1 || S == 1 || N == 1) ardyoq = 1; COLOR = CUR; if (W == 4) DIRECTION = 'W'; else if (S == 5) DIRECTION = 'S'; else if (E == 2) DIRECTION = 'E'; else if (N == 3) DIRECTION = 'N'; else { COLOR = ardyoq; if (CUR == 2 && W != -2) DIRECTION = 'W'; else if (CUR == 3 && S != -2) DIRECTION = 'S'; else if (CUR == 4 && E != -2) DIRECTION = 'E'; else if (CUR == 5 && N != -2) DIRECTION = 'N'; else DIRECTION = 'T'; } } set_instruction(INSTRUCTION, COLOR, DIRECTION); } void program_pulibot() { int MAXZ = 6; replr(CUR, 0, MAXZ) replr(N, -2, MAXZ) replr(E, -2, MAXZ) replr(S, -2, MAXZ) replr(W, -2, MAXZ) { solve(CUR, W, S, E, N); } }
#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...