제출 #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...