Submission #677406

#TimeUsernameProblemLanguageResultExecution timeMemory
677406jhwest2기억 압축 (JOI15_memory)C++17
30 / 100
6102 ms419216 KiB
#include "Memory_lib.h" #include <bits/stdc++.h> using namespace std; namespace { const int N = 100; const int B = 1 << 22; bool init = false; int sz = 0; array<int, 5> a[B]; map<array<int, 5>, int> mp; void initialize(int n) { for (int rev = 0; rev <= 1; rev++) for (int s = 1; s <= n; s++) for (int t = 1; t <= n; t++) for (int x = 0; x <= n / 2; x++) for (int y = 0; y <= n / 2; y++) if (((!rev && s <= t) || (rev && s >= t)) && (x + y) % 2 == abs(t - s) % 2 && x + y <= abs(t - s)) a[sz++] = {rev, s, t, x, y}; for (int i = 0; i < sz; i++) mp[a[i]] = i; } } int Memory(int n, int m) { if (!init) { init = true; initialize(n); } if (m >= sz) return -2; auto [rev, s, t, x, y] = a[m]; char c = Get(t); if (!rev) { if (s == t && (c == '>' || c == ']')) { if (s != n) { s = s + 1; t = t + 1; return mp[{rev, s, t, x, y}]; } else { rev = 1; s = n; t = n; return mp[{rev, s, t, x, y}]; } } else { if (c == '[') ++x; if (c == ']') --x; if (c == '<') ++y; if (c == '>') --y; if (x < 0 || y < 0 || x > n / 2 || y > n / 2) return -2; else { if (x != 0 || y != 0) { t = t + 1; if (t == n + 1) return -2; else return mp[{rev, s, t, x, y}]; } else { if (s != n) { s = s + 1; t = s; x = 0; y = 0; return mp[{rev, s, t, x, y}]; } else { return mp[{1, n, n, 0, 0}]; } } } } } else { if (s == t && (c == '<' || c == '[')) { if (s != 1) { s = s - 1; t = t - 1; return mp[{rev, s, t, x, y}]; } else return -1; } else { if (c == ']') ++x; if (c == '[') --x; if (c == '>') ++y; if (c == '<') --y; if (x < 0 || y < 0 || x > n / 2 || y > n / 2) return -2; else { if (x != 0 || y != 0) { t = t - 1; if (t == 0) return -2; else return mp[{rev, s, t, x, y}]; } else { if (s != 1) { s = s - 1; t = s; x = 0; y = 0; return mp[{rev, s, t, x, y}]; } else return -1; } } } } }
#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...