| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1331573 | QuocSensei | 로봇 대회 (IOI23_robot) | C++20 | 34 ms | 5608 KiB |
#include "robot.h"
#include <bits/stdc++.h>
#define ll long long
#define el cout << endl
#define DEBUG(...) [](auto &&...x) {int i = 0; ((cout << (i++ ? " " : "") << x), ...), el;} (__VA_ARGS__)
using namespace std;
const char DIR[] = {'W', 'S', 'E', 'N'};
namespace SUBTASK_1
{
void program_pulibot()
{
set_instruction({0, 1, -2, -2, 0}, 1, 'T');
set_instruction({0, -2, 0, 0, -2}, 1, 'S');
set_instruction({0, -2, 0, 0, 1}, 1, 'S');
set_instruction({0, -2, -2, 0, 1}, 1, 'E');
set_instruction({0, 1, -2, 0, 0}, 1, 'E');
}
};
namespace SUBTASK_2
{
void program_pulibot()
{
auto genE = [&] ()
{
for (int x = -2; x <= 1; x++)
for (int y = -2; y <= 1; y++)
for (int q = -2; q <= 1; q++)
{
int p = 0;
set_instruction({0, x, y, p, q}, 1, 'E');
}
};
auto genN = [&] ()
{
for (int x = -2; x <= 1; x++)
for (int y = -2; y <= 1; y++)
{
for (int p = -2; p <= -1; p++)
{
if (y == -2 && p == -2)
continue;
int q = 0;
set_instruction({0, x, y, p, q}, 1, 'N');
}
}
};
auto genS = [&] ()
{
for (int x = -2; x <= 1; x++)
for (int p = -2; p <= -1; p++)
for (int q = -2; q <= -1; q++)
{
int y = 0;
set_instruction({0, x, y, p, q}, 1, 'S');
}
};
auto genT = [&] ()
{
for (int x = -2; x <= 1; x++)
for (int q = -2; q <= 1; q++)
{
int y = -2;
int p = -2;
set_instruction({0, x, y, p, q}, 1, 'T');
}
};
genE();
genN();
genS();
genT();
}
}
namespace SUBTASK_3
{
void gen_dfs()
{
vector<int> val = {-1, -2, 0, 2, 3};
for (int x : val)
for (int y : val)
for (int p : val)
for (int q : val)
{
auto f = [&] (int x)
{
return x == 3;
};
bool is_root = x == -2 && q == -2;
int cnt = f(x) + f(y) + f(p) + f(q);
if (cnt != 1 && !(is_root && cnt == 0))
continue;
if (y == -2 && p == -2)
continue;
vector<int> v = {x, y, p, q};
bool flag = 0;
for (int k = 0; k < 4; k++)
if (v[k] == 0)
{
set_instruction({0, x, y, p, q}, 3, DIR[k]);
set_instruction({3, x, y, p, q}, 3, DIR[k]);
flag |= 1;
break;
}
if (flag)
continue;
for (int k = 0; k < 4; k++)
if (v[k] == 3)
{
set_instruction({0, x, y, p, q}, 2, DIR[k]);
set_instruction({3, x, y, p, q}, 2, DIR[k]);
}
}
}
void gen_ans()
{
vector<int> val = {-1, -2, 0, 2, 3};
for (int x : val)
for (int q : val)
{
auto f = [&] (int x)
{
return x == 3;
};
if (f(x) + f(q) != 1)
continue;
vector<int> v = {x, q};
vector<char> dir = {'W', 'N'};
for (int k = 0; k < 2; k++)
if (v[k] == 3)
set_instruction({0, x, -2, -2, q}, 1, dir[k]);
}
val.push_back(4);
for (int x : val)
for (int y : val)
for (int p : val)
for (int q : val)
{
vector<int> v = {x, y, p, q};
int cnt3 = 0;
for (int k : v)
cnt3 += k == 3 || k == 4;
if (cnt3 != 1)
continue;
bool flag = 0;
for (int k = 0; k < 4; k++)
if (v[k] == 2)
{
set_instruction({4, x, y, p, q}, 4, DIR[k]);
set_instruction({2, x, y, p, q}, 4, DIR[k]);
flag |= 1;
break;
}
if (flag)
continue;
for (int k = 0; k < 4; k++)
if (v[k] == 3 || v[k] == 4)
{
set_instruction({2, x, y, p, q}, 0, DIR[k]);
set_instruction({4, x, y, p, q}, 0, DIR[k]);
}
}
val.pop_back();
val.push_back(1);
for (int x : val)
for (int y : val)
for (int p : val)
for (int q : val)
{
vector<int> v = {x, y, p, q};
int cnt1 = 0;
int cnt3 = 0;
bool is_root = x == -2 && q == -2;
for (int k : v)
{
cnt1 += k == 1;
cnt3 += k == 3;
}
if (cnt1 != 1)
continue;
if (cnt3 != 1 && !is_root)
continue;
bool flag = 0;
for (int k = 0; k < 4; k++)
{
if (v[k] == 2)
{
set_instruction({3, x, y, p, q}, 3, DIR[k]);
flag |= 1;
break;
}
}
if (flag)
continue;
for (int k = 0; k < 4; k++)
if (v[k] == 3)
{
set_instruction({3, x, y, p, q}, 1, DIR[k]);
}
}
val = {-2, -1, 0, 1};
for (int y : val)
for (int p : val)
{
int x = -2;
int q = -2;
if ((y == 1) + (p == 1) != 1)
continue;
set_instruction({3, x, y, p, q}, 1, 'T');
}
}
void program_pulibot()
{
gen_dfs();
gen_ans();
}
}
namespace SUBTASK_4
{
void gen_dfs()
{
vector<int> val = {-1, -2, 0, 2, 3};
for (int x : val)
for (int y : val)
for (int p : val)
for (int q : val)
{
auto f = [&] (int x)
{
return x == 3;
};
bool is_root = x == -2 && q == -2;
int cnt = f(x) + f(y) + f(p) + f(q);
if (cnt != 1 && !(is_root && cnt == 0))
continue;
if (y == -2 && p == -2)
continue;
vector<int> v = {x, y, p, q};
vector<int> dir = {1, 2};
bool flag = 0;
for (int k : dir)
if (v[k] == 0)
{
set_instruction({0, x, y, p, q}, 3, DIR[k]);
set_instruction({3, x, y, p, q}, 3, DIR[k]);
flag |= 1;
break;
}
if (flag)
continue;
dir = {0, 3};
for (int k : dir)
if (v[k] == 3)
{
set_instruction({0, x, y, p, q}, 2, DIR[k]);
set_instruction({3, x, y, p, q}, 2, DIR[k]);
}
}
}
void gen_ans()
{
vector<int> val = {-1, -2, 0, 2, 3};
for (int x : val)
for (int q : val)
{
auto f = [&] (int x)
{
return x == 3;
};
if (f(x) + f(q) != 1)
continue;
vector<int> v = {x, q};
vector<char> dir = {'W', 'N'};
for (int k = 0; k < 2; k++)
if (v[k] == 3)
set_instruction({0, x, -2, -2, q}, 1, dir[k]);
}
val.push_back(4);
for (int x : val)
for (int y : val)
for (int p : val)
for (int q : val)
{
vector<int> v = {x, y, p, q};
int cnt3 = 0;
for (int k : v)
cnt3 += k == 3 || k == 4;
if (cnt3 != 1)
continue;
bool flag = 0;
for (int k = 0; k < 4; k++)
if (v[k] == 2)
{
set_instruction({4, x, y, p, q}, 4, DIR[k]);
set_instruction({2, x, y, p, q}, 4, DIR[k]);
flag |= 1;
break;
}
if (flag)
continue;
for (int k = 0; k < 4; k++)
if (v[k] == 3 || v[k] == 4)
{
set_instruction({2, x, y, p, q}, 0, DIR[k]);
set_instruction({4, x, y, p, q}, 0, DIR[k]);
}
}
val.pop_back();
val.push_back(1);
for (int x : val)
for (int y : val)
for (int p : val)
for (int q : val)
{
vector<int> v = {x, y, p, q};
int cnt1 = 0;
int cnt3 = 0;
bool is_root = x == -2 && q == -2;
for (int k : v)
{
cnt1 += k == 1;
cnt3 += k == 3;
}
if (cnt1 != 1)
continue;
if (cnt3 != 1 && !is_root)
continue;
bool flag = 0;
for (int k = 0; k < 4; k++)
{
if (v[k] == 2)
{
set_instruction({3, x, y, p, q}, 3, DIR[k]);
flag |= 1;
break;
}
}
if (flag)
continue;
for (int k = 0; k < 4; k++)
if (v[k] == 3)
{
set_instruction({3, x, y, p, q}, 1, DIR[k]);
}
}
val = {-2, -1, 0, 1};
for (int y : val)
for (int p : val)
{
int x = -2;
int q = -2;
if ((y == 1) + (p == 1) != 1)
continue;
set_instruction({3, x, y, p, q}, 1, 'T');
}
}
void program_pulibot()
{
gen_dfs();
gen_ans();
}
}
void program_pulibot()
{
SUBTASK_4::program_pulibot();
}
| # | 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... | ||||
