이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "prison.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
template <typename T1, typename T2>
using indexed_map = tree<T1, T2, less<T1>, rb_tree_tag, tree_order_statistics_node_update>;
template <typename T>
using indexed_set = indexed_map<T, null_type>;
#define loop(x, i) for (int i = 0; i < (x); i++)
#define loop1(x, i) for (int i = 1; i <= (x); i++)
#define rev(x, i) for (int i = (int)(x) - 1; i >= 0; i--)
#define itloop(x) for (auto it = begin(x); x != end(x); it++)
#define itrev(x) for (auto it = rbegin(x); x != rend(x); it++)
#define INF ((int64_t)(4e18 + 1))
#define INF32 ((int32_t)(2e9 + 1))
#define ALL(x) begin(x), end(x)
#define RALL(x) rbegin(x), rend(x)
#define removeIn(x, l) l.erase(find(ALL(l), x))
#define pb push_back
#define sz(x) (int)(x).size()
#define F first
#define S second
#define var const auto &
#define foreach(l) for (var e : l)
typedef int8_t i8;
typedef int16_t i16;
typedef int32_t i32;
typedef int64_t i64;
typedef pair<int, int> ii;
typedef tuple<int, int, int> iii;
typedef tuple<int, int, int, int> iiii;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<ii> vii;
typedef vector<iii> viii;
typedef vector<vii> vvii;
typedef vector<viii> vviii;
typedef set<int> si;
typedef set<ii> sii;
typedef set<iii> siii;
typedef vector<si> vsi;
typedef vector<sii> vsii;
typedef vector<vsi> vvsi;
typedef vector<string> vstr;
typedef vector<vector<string>> vvstr;
typedef vector<bool> vb;
typedef vector<vb> vvb;
string toBase3(int num)
{
string res;
if (num == 0)
return "00000000";
while (num > 0)
{
res = (char)('0' + (num % 3)) + res;
num /= 3;
}
while (sz(res) < 8)
res.insert(res.begin(), '0');
return res;
}
vvi devise_strategy(int N)
{
vvi s(24, vi(N + 1));
s[0][0] = 0;
loop1(N, A)
{
string nm = toBase3(A);
s[0][A] = ('3' - nm[0]);
}
loop(8, i)
{
s[3 * i + 1][0] = (i % 2 == 0);
s[3 * i + 2][0] = (i % 2 == 0);
if (i != 7)
s[3 * i + 3][0] = (i % 2 == 0);
int cur = -2;
int other = -1;
if (i % 2 == 1)
swap(cur, other);
loop(3, a)
{
if (i == 7 && a == 0)
continue;
int ix = 3 * i + (3 - a);
loop1(N, B)
{
string nm = toBase3(B);
if (nm[i] < ('0' + a))
s[ix][B] = cur;
else if (nm[i] > ('0' + a))
s[ix][B] = other;
else
{
if (i == 7)
{
s[ix][B] = -1; // impossible
}
else if (B == 1)
{
s[ix][B] = cur;
}
else if (i == 6 && nm[i + 1] == '0')
{
s[ix][B] = cur;
}
else
s[ix][B] = 3 * (i + 1) + ('3' - nm[i + 1]);
}
}
}
}
return s;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |