제출 #1258791

#제출 시각아이디문제언어결과실행 시간메모리
1258791nicolo_010로봇 대회 (IOI23_robot)C++20
16 / 100
87 ms5812 KiB
#include <bits/stdc++.h> #include "robot.h" using namespace std; template <typename T> using v = vector<T>; using ll = long long; using pii = pair<int, int>; #define rep(i, k, n) for (int i = k; i < n; i++) #define set_instructions set_instruction #define cout if(0) cout map<v<int>, int> mp; bool not_used(v<int> S) { bool can = !mp.count(S); mp[S] = 1; return can; } void program_pulibot() { v<int> S = {0, 0, -2, -2, 0}; rep(i, -1, 4) { S[1] = i; S[4] = 2; if (not_used(S)) set_instructions(S, 1, 'N'); S[1] = 2; S[4] = i; if (not_used(S)) set_instructions(S, 1, 'W'); mp[S] = 1; } S = {2, -2, 0, 0, -2}; rep(i, -1, 4) { S[2] = i; S[3] = 1; if (not_used(S)) set_instructions(S, 1, 'T'); S[2] = 1; S[3] = i; if (not_used(S)) set_instructions(S, 1, 'T'); } set<int> s; rep(i, 1, 5) { s.insert(i); } v<char> c = {'X', 'W', 'S', 'E', 'N'}; rep(i, 2, 4) { s.erase(i); S = {2, 0, 0, 0, 0}; rep(j, -2, 4) { rep(k, -2, 4) { rep(z, -2, 4) { S[0] = 2; S[i] = 1; auto it = s.begin(); S[*it] = j; it++; S[*it] = k; it++; S[*it] = z; int dos = -1; rep(ii, 1, 5) { if (S[ii] == 2) dos = ii; } char dir = (dos != -1 ? c[dos] : 'H'); if (not_used(S)) set_instructions(S, 1, dir); } } } s.insert(i); } rep(i, 2, 4) { s.erase(i); S = {0, 0, 0, 0, 0}; rep(j, -2, 4) { rep(k, -2, 4) { rep(z, -2, 4) { S[0] = 0; S[i] = 0; auto it = s.begin(); S[*it] = j; it++; S[*it] = k; it++; S[*it] = z; if (i == 3 && S[0] == 0 && S[1] == -2 && S[2] == -2 && S[3] == 0 && S[4] == 2) { cout << c[i] << endl; } if (not_used(S)) { set_instructions(S, 2, c[i]); if (i == 3 && S[0] == 0 && S[1] == -2 && S[2] == -2 && S[3] == 0 && S[4] == 2) cout << c[i] << endl; } S[0] = 2; if (not_used(S)) set_instructions(S, 2, c[i]); } } } s.insert(i); } rep(i, 1, 5) { if (i == 2 || i == 3) continue; s.erase(i); S = {0, 0, 0, 0, 0}; rep(j, -2, 4) { rep(k, -2, 4) { rep(z, -2, 4) { S[0] = 0; S[i] = 2; auto it = s.begin(); S[*it] = j; it++; S[*it] = k; it++; S[*it] = z; if (not_used(S)) set_instructions(S, 3, c[i]); S[0] = 2; bool uno = false; for (auto x : S) if (x == 1) uno = true; int col = (uno ? 1 : 3); if (not_used(S)) set_instructions(S, col, c[i]); } } } s.insert(i); } }
#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...