提出 #72330408
ソースコード 拡げる
/**
* AtCoder Heuristic Contest 059 Solution
* Strategy: SA on Dyck Path + Iterative Tree DP + Pruning
* Updates:
* 1. Base: Improved Iterative Tree DP version.
* 2. Improved Block Shift:
* - 20%: Insert as leaf (v v) at optimal position.
* - 80%: Insert wrapping an existing block u (v u ... u v) at optimal position.
*/
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
#include <chrono>
#include <random>
#include <numeric>
#include <cassert>
using namespace std;
// --- Constants ---
const int N = 20;
const int NUM_PAIRS = N * N / 2; // 200
const double TIME_LIMIT = 1.95;
// --- Structs ---
struct Point {
int r, c;
inline int dist(const Point& other) const {
return abs(r - other.r) + abs(c - other.c);
}
};
struct Xorshift {
uint32_t x = 123456789;
uint32_t y = 362436069;
uint32_t z = 521288629;
uint32_t w = 88675123;
inline uint32_t next() {
uint32_t t = x ^ (x << 11);
x = y; y = z; z = w;
return w = (w ^ (w >> 19)) ^ (t ^ (t >> 8));
}
inline int next_int(int n) {
return next() % n;
}
inline double next_double() {
return next() / 4294967295.0;
}
};
// --- Globals ---
Point pair_locs[NUM_PAIRS][2];
Point start_pos = { 0, 0 };
struct CostPair {
int c0;
int c1;
};
// --- Solver ---
class Solver {
Xorshift rng;
vector<int> p;
// Tree DP buffers
vector<int> adj_head;
vector<int> adj_next;
vector<int> node_stack;
vector<bool> seen;
vector<int> post_order;
vector<CostPair> memo;
// Transition buffers
vector<int> temp_next_p;
vector<int> current_block;
vector<int> p_without_blocks;
// Relabel buffers
vector<int> r_list;
vector<bool> visited;
vector<int> mapping;
// Block tracking
vector<int> block_starts;
public:
void read_input() {
int n_dummy;
if (cin >> n_dummy) {}
for (int i = 0; i < NUM_PAIRS; ++i) {
pair_locs[i][0] = { -1, -1 };
pair_locs[i][1] = { -1, -1 };
}
for (int r = 0; r < N; ++r) {
for (int c = 0; c < N; ++c) {
int val;
cin >> val;
if (pair_locs[val][0].r == -1) pair_locs[val][0] = { r, c };
else pair_locs[val][1] = { r, c };
}
}
// Resize buffers
adj_head.resize(NUM_PAIRS + 1);
adj_next.resize(NUM_PAIRS);
node_stack.resize(NUM_PAIRS + 5);
seen.resize(NUM_PAIRS);
post_order.resize(NUM_PAIRS + 1);
memo.resize(NUM_PAIRS + 1);
temp_next_p.reserve(2 * NUM_PAIRS);
current_block.reserve(2 * NUM_PAIRS);
p_without_blocks.reserve(2 * NUM_PAIRS);
r_list.reserve(NUM_PAIRS);
visited.resize(NUM_PAIRS);
mapping.resize(NUM_PAIRS);
block_starts.resize(NUM_PAIRS);
}
// Helper: Min dist
inline int get_min_dist(int id1, int id2) {
if (id1 == -1 && id2 == -1) return 0;
Point p1_0, p1_1;
if (id1 == -1) { p1_0 = start_pos; p1_1 = start_pos; }
else { p1_0 = pair_locs[id1][0]; p1_1 = pair_locs[id1][1]; }
Point p2_0, p2_1;
if (id2 == -1) { p2_0 = start_pos; p2_1 = start_pos; }
else { p2_0 = pair_locs[id2][0]; p2_1 = pair_locs[id2][1]; }
int d1 = p1_0.dist(p2_0);
int d2 = p1_0.dist(p2_1);
int d3 = p1_1.dist(p2_0);
int d4 = p1_1.dist(p2_1);
int m1 = (d1 < d2) ? d1 : d2;
int m2 = (d3 < d4) ? d3 : d4;
return (m1 < m2) ? m1 : m2;
}
// Helper: Block range
pair<int, int> get_block_range(const vector<int>& seq, int target_pair) {
int start = -1;
for(int i=0; i<(int)seq.size(); ++i) {
if (seq[i] == target_pair) {
if (start == -1) start = i;
else return {start, i + 1};
}
}
return {-1, -1};
}
void build_tree() {
fill(adj_head.begin(), adj_head.end(), -1);
fill(seen.begin(), seen.end(), false);
int stack_top = 0;
node_stack[stack_top++] = NUM_PAIRS;
int po_idx = 0;
static int last_child[NUM_PAIRS + 1];
fill(last_child, last_child + NUM_PAIRS + 1, -1);
for (int x : p) {
if (!seen[x]) {
int parent = node_stack[stack_top - 1];
if (adj_head[parent] == -1) {
adj_head[parent] = x;
} else {
adj_next[last_child[parent]] = x;
}
last_child[parent] = x;
adj_next[x] = -1;
node_stack[stack_top++] = x;
seen[x] = true;
}
else {
post_order[po_idx++] = x;
stack_top--;
}
}
post_order[po_idx++] = NUM_PAIRS;
}
int calc_score_iterative() {
build_tree();
for (int k = 0; k <= NUM_PAIRS; ++k) {
int u = post_order[k];
Point u0_in, u0_out, u1_in, u1_out;
if (u == NUM_PAIRS) {
u0_in = u0_out = u1_in = u1_out = start_pos;
} else {
u0_in = pair_locs[u][0]; u0_out = pair_locs[u][1];
u1_in = pair_locs[u][1]; u1_out = pair_locs[u][0];
}
int first_child = adj_head[u];
if (first_child == -1) {
if (u == NUM_PAIRS) {
memo[u] = { 0, 0 };
} else {
int d = u0_in.dist(u0_out);
memo[u] = { d, d };
}
continue;
}
// Config 0
int dp0, dp1;
Point pt0 = u0_in;
Point pt1 = u0_in;
{
int v = first_child;
int cost_v0 = memo[v].c0;
int cost_v1 = memo[v].c1;
dp0 = pt0.dist(pair_locs[v][0]) + cost_v0;
dp1 = pt0.dist(pair_locs[v][1]) + cost_v1;
pt0 = pair_locs[v][1];
pt1 = pair_locs[v][0];
}
int v = adj_next[first_child];
while (v != -1) {
int cost_v0 = memo[v].c0;
int cost_v1 = memo[v].c1;
int t0_0 = dp0 + pt0.dist(pair_locs[v][0]);
int t0_1 = dp1 + pt1.dist(pair_locs[v][0]);
int next0 = (t0_0 < t0_1 ? t0_0 : t0_1) + cost_v0;
int t1_0 = dp0 + pt0.dist(pair_locs[v][1]);
int t1_1 = dp1 + pt1.dist(pair_locs[v][1]);
int next1 = (t1_0 < t1_1 ? t1_0 : t1_1) + cost_v1;
dp0 = next0; dp1 = next1;
pt0 = pair_locs[v][1];
pt1 = pair_locs[v][0];
v = adj_next[v];
}
int res_c0 = min(dp0 + pt0.dist(u0_out), dp1 + pt1.dist(u0_out));
if (u == NUM_PAIRS) {
int root_res = min(dp0, dp1);
memo[u] = { root_res, root_res };
continue;
}
// Config 1
{
dp0 = 0; dp1 = 0;
pt0 = u1_in; pt1 = u1_in;
int v = first_child;
int curr0 = pt0.dist(pair_locs[v][0]) + memo[v].c0;
int curr1 = pt0.dist(pair_locs[v][1]) + memo[v].c1;
dp0 = curr0; dp1 = curr1;
pt0 = pair_locs[v][1]; pt1 = pair_locs[v][0];
v = adj_next[v];
while(v != -1) {
int cost_v0 = memo[v].c0;
int cost_v1 = memo[v].c1;
int t0_0 = dp0 + pt0.dist(pair_locs[v][0]);
int t0_1 = dp1 + pt1.dist(pair_locs[v][0]);
int next0 = (t0_0 < t0_1 ? t0_0 : t0_1) + cost_v0;
int t1_0 = dp0 + pt0.dist(pair_locs[v][1]);
int t1_1 = dp1 + pt1.dist(pair_locs[v][1]);
int next1 = (t1_0 < t1_1 ? t1_0 : t1_1) + cost_v1;
dp0 = next0; dp1 = next1;
pt0 = pair_locs[v][1]; pt1 = pair_locs[v][0];
v = adj_next[v];
}
}
int res_c1 = min(dp0 + pt0.dist(u1_out), dp1 + pt1.dist(u1_out));
memo[u] = { res_c0, res_c1 };
}
return memo[NUM_PAIRS].c0;
}
void solve() {
auto start_clock = chrono::system_clock::now();
vector<int> r_perm(NUM_PAIRS);
iota(r_perm.begin(), r_perm.end(), 0);
for (int i = NUM_PAIRS - 1; i > 0; i--) {
int j = rng.next_int(i + 1);
swap(r_perm[i], r_perm[j]);
}
p.clear();
for (int i = 0; i < NUM_PAIRS; i++) p.push_back(r_perm[i]);
for (int i = 0; i < NUM_PAIRS; i++) p.push_back(r_perm[NUM_PAIRS - 1 - i]);
int current_score = calc_score_iterative();
int best_score = current_score;
vector<int> best_p = p;
double temp_start = 1.0;
double temp_end = 0.1;
int iter = 0;
double temp = temp_start;
double ratio = 0.0;
while (true) {
iter++;
if ((iter & 0x1FF) == 0) {
auto now = chrono::system_clock::now();
double elapsed = chrono::duration_cast<chrono::microseconds>(now - start_clock).count() * 1e-6;
if (elapsed > TIME_LIMIT) break;
ratio = elapsed / TIME_LIMIT;
temp = temp_start + (temp_end - temp_start) * ratio;
}
int type = rng.next_int(100);
if (type < 40 && ratio > 0.5) {
// --- 1. Single Block Shift (Improved) ---
int v = rng.next_int(NUM_PAIRS);
pair<int, int> range = get_block_range(p, v);
current_block.assign(p.begin() + range.first, p.begin() + range.second);
p_without_blocks.clear();
p_without_blocks.insert(p_without_blocks.end(), p.begin(), p.begin() + range.first);
p_without_blocks.insert(p_without_blocks.end(), p.begin() + range.second, p.end());
// Find valid insertion points (existing blocks to wrap)
fill(block_starts.begin(), block_starts.end(), -1);
vector<int> existing_blocks;
for(int i=0; i<(int)p_without_blocks.size(); ++i) {
int id = p_without_blocks[i];
if(block_starts[id] == -1) {
block_starts[id] = i;
} else {
existing_blocks.push_back(id);
}
}
int best_type = -1; // 0: leaf, 1: wrap
int best_ins_param = -1;
int best_heuristic = 2e9;
int outer_v = v;
int d_v_self = pair_locs[outer_v][0].dist(pair_locs[outer_v][1]);
int trials = 20;
for(int k=0; k<trials; ++k) {
// 20% Leaf, 80% Wrap
bool try_wrap = (rng.next_int(100) < 80 && !existing_blocks.empty());
if (try_wrap) {
// Wrap around u
int u = existing_blocks[rng.next_int(existing_blocks.size())];
int u_start = block_starts[u];
int u_end = -1;
for(int i=u_start+1; i<(int)p_without_blocks.size(); ++i) {
if(p_without_blocks[i] == u) { u_end = i; break; }
}
// Insert v ... u ... u ... v
// Pos1: u_start, Pos2: u_end + 1
int prev_id_1 = (u_start > 0) ? p_without_blocks[u_start-1] : -1;
int next_id_1 = u;
int prev_id_2 = u;
int next_id_2 = (u_end < (int)p_without_blocks.size()-1) ? p_without_blocks[u_end+1] : -1;
int d_delta1 = get_min_dist(prev_id_1, outer_v) + get_min_dist(outer_v, next_id_1) - get_min_dist(prev_id_1, next_id_1);
int d_delta2 = get_min_dist(prev_id_2, outer_v) + get_min_dist(outer_v, next_id_2) - get_min_dist(prev_id_2, next_id_2);
int heuristic = d_delta1 + d_delta2 + d_v_self;
if (heuristic < best_heuristic) {
best_heuristic = heuristic;
best_type = 1;
best_ins_param = u;
}
} else {
// Leaf insertion
int idx = rng.next_int(p_without_blocks.size() + 1);
int prev_id = (idx > 0) ? p_without_blocks[idx-1] : -1;
int next_id = (idx < (int)p_without_blocks.size()) ? p_without_blocks[idx] : -1;
int d_prev_v = get_min_dist(prev_id, outer_v);
int d_v_next = get_min_dist(outer_v, next_id);
int d_rem = get_min_dist(prev_id, next_id);
int heuristic = d_prev_v + d_v_self + d_v_next - d_rem;
if (heuristic < best_heuristic) {
best_heuristic = heuristic;
best_type = 0;
best_ins_param = idx;
}
}
}
temp_next_p = p_without_blocks;
if (best_type == 1) {
// Wrap u
int u = best_ins_param;
int u_start = -1, u_end = -1;
for(int i=0; i<(int)temp_next_p.size(); ++i) {
if(temp_next_p[i] == u) {
if(u_start == -1) u_start = i;
else { u_end = i; break; }
}
}
// Note: current_block contains v's full subtree.
// To wrap u, we need to split current_block into [v, children..., v].
// If v is a leaf, it's just v, v.
// If v has children, we need to decide where to put them.
// For simplicity, if v has children (size > 2), we fallback to Leaf Insertion.
// If v is leaf (size == 2), we can wrap.
if (current_block.size() > 2) {
int idx = rng.next_int(temp_next_p.size() + 1);
temp_next_p.insert(temp_next_p.begin() + idx, current_block.begin(), current_block.end());
} else {
temp_next_p.insert(temp_next_p.begin() + u_end + 1, v);
temp_next_p.insert(temp_next_p.begin() + u_start, v);
}
} else {
// Leaf or fallback
int idx = (best_type == 0) ? best_ins_param : rng.next_int(temp_next_p.size() + 1);
temp_next_p.insert(temp_next_p.begin() + idx, current_block.begin(), current_block.end());
}
p.swap(temp_next_p);
int new_score = calc_score_iterative();
int delta = new_score - current_score;
if (delta < 0 || rng.next_double() < exp(-delta / temp)) {
current_score = new_score;
if (current_score < best_score) {
best_score = current_score;
best_p = p;
cerr << "Update: " << best_score << endl;
}
} else {
p.swap(temp_next_p); // Revert
}
} else if (type < 70 && ratio > 0.5) {
// --- 2. Subtree Reverse ---
int best_target = -1, best_L = -1, best_R = -1;
int best_heuristic_gain = 2e9;
for(int k=0; k<10; ++k) {
int target = rng.next_int(NUM_PAIRS);
int L = -1, R = -1;
for (int i = 0; i < (int)p.size(); ++i) {
if (p[i] == target) {
if (L == -1) L = i;
else { R = i; break; }
}
}
if (L + 1 < R) {
int id_P = p[L];
int id_First = p[L+1];
int id_Last = p[R-1];
int current_conn = get_min_dist(id_P, id_First) + get_min_dist(id_Last, id_P);
int new_conn = get_min_dist(id_P, id_Last) + get_min_dist(id_First, id_P);
int gain = new_conn - current_conn;
if (gain < best_heuristic_gain) {
best_heuristic_gain = gain;
best_target = target;
best_L = L; best_R = R;
}
}
}
if (best_L != -1) {
reverse(p.begin() + best_L + 1, p.begin() + best_R);
int new_score = calc_score_iterative();
int delta = new_score - current_score;
if (delta < 0 || rng.next_double() < exp(-delta / temp)) {
current_score = new_score;
if (current_score < best_score) {
best_score = current_score;
best_p = p;
cerr << "Update: " << best_score << endl;
}
} else {
reverse(p.begin() + best_L + 1, p.begin() + best_R);
}
}
} else {
// --- 3. Interval Relabeling ---
r_list.clear();
fill(visited.begin(), visited.end(), false);
for (int x : p) {
if (!visited[x]) {
visited[x] = true;
r_list.push_back(x);
}
}
int i = rng.next_int(NUM_PAIRS);
int j = rng.next_int(NUM_PAIRS);
if (i > j) swap(i, j);
for (int k = 0; k < NUM_PAIRS; ++k) mapping[k] = k;
for (int k = 0; k <= j - i; ++k) {
mapping[r_list[i + k]] = r_list[j - k];
}
vector<int> old_p = p;
for (int& x : p) x = mapping[x];
int new_score = calc_score_iterative();
int delta = new_score - current_score;
if (delta < 0 || rng.next_double() < exp(-delta / temp)) {
current_score = new_score;
if (current_score < best_score) {
best_score = current_score;
best_p = p;
cerr << "Update: " << best_score << endl;
}
} else {
p = old_p; // Revert
}
}
}
reconstruct_and_print(best_p);
}
void reconstruct_and_print(const vector<int>& final_p) {
p = final_p;
calc_score_iterative();
vector<int> final_q(NUM_PAIRS);
vector<pair<int, int>> assign_stack;
assign_stack.reserve(NUM_PAIRS + 1);
assign_stack.push_back({NUM_PAIRS, 0});
while(!assign_stack.empty()) {
auto [u, u_config] = assign_stack.back();
assign_stack.pop_back();
if (u != NUM_PAIRS) final_q[u] = u_config;
int first_child = adj_head[u];
if (first_child == -1) continue;
vector<int> children;
for(int v = first_child; v != -1; v = adj_next[v]) children.push_back(v);
int K = children.size();
Point start_pt;
if (u == NUM_PAIRS) start_pt = start_pos;
else start_pt = (u_config == 0) ? pair_locs[u][0] : pair_locs[u][1];
vector<vector<int>> dp(K, vector<int>(2));
vector<vector<int>> parent_cfg(K, vector<int>(2));
int v0 = children[0];
dp[0][0] = start_pt.dist(pair_locs[v0][0]) + memo[v0].c0;
dp[0][1] = start_pt.dist(pair_locs[v0][1]) + memo[v0].c1;
for(int i=1; i<K; ++i) {
int v = children[i];
int prev_v = children[i-1];
int c00 = dp[i-1][0] + pair_locs[prev_v][1].dist(pair_locs[v][0]) + memo[v].c0;
int c10 = dp[i-1][1] + pair_locs[prev_v][0].dist(pair_locs[v][0]) + memo[v].c0;
if (c00 < c10) { dp[i][0] = c00; parent_cfg[i][0] = 0; } else { dp[i][0] = c10; parent_cfg[i][0] = 1; }
int c01 = dp[i-1][0] + pair_locs[prev_v][1].dist(pair_locs[v][1]) + memo[v].c1;
int c11 = dp[i-1][1] + pair_locs[prev_v][0].dist(pair_locs[v][1]) + memo[v].c1;
if (c01 < c11) { dp[i][1] = c01; parent_cfg[i][1] = 0; } else { dp[i][1] = c11; parent_cfg[i][1] = 1; }
}
int last_cfg = 0;
if (u == NUM_PAIRS) {
if (dp[K-1][1] < dp[K-1][0]) last_cfg = 1;
} else {
Point u_out = (u_config == 0) ? pair_locs[u][1] : pair_locs[u][0];
int v_last = children.back();
int total0 = dp[K-1][0] + pair_locs[v_last][1].dist(u_out);
int total1 = dp[K-1][1] + pair_locs[v_last][0].dist(u_out);
if (total1 < total0) last_cfg = 1;
}
for(int i=K-1; i>=0; --i) {
assign_stack.push_back({children[i], last_cfg});
if (i > 0) last_cfg = parent_cfg[i][last_cfg];
}
}
string ops = "";
Point curr = start_pos;
vector<int> count(NUM_PAIRS, 0);
auto move_gen = [&](Point target) {
while (curr.r < target.r) { ops += 'D'; curr.r++; }
while (curr.r > target.r) { ops += 'U'; curr.r--; }
while (curr.c < target.c) { ops += 'R'; curr.c++; }
while (curr.c > target.c) { ops += 'L'; curr.c--; }
ops += 'Z';
};
for (int x : p) {
bool is_sec = (count[x] > 0);
int type = is_sec ? (1 - final_q[x]) : final_q[x];
move_gen(pair_locs[x][type]);
count[x]++;
}
for (char c : ops) cout << c << "\n";
}
};
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
Solver solver;
solver.read_input();
solver.solve();
return 0;
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | A - Stack to Match Pairs |
| ユーザ | E869120 |
| 言語 | C++23 (GCC 15.2.0) |
| 得点 | 2292921 |
| コード長 | 24029 Byte |
| 結果 | AC |
| 実行時間 | 1953 ms |
| メモリ | 3996 KiB |
コンパイルエラー
./Main.cpp: In member function 'void Solver::solve()':
./Main.cpp:469:21: warning: variable 'best_target' set but not used [-Wunused-but-set-variable]
469 | int best_target = -1, best_L = -1, best_R = -1;
| ^~~~~~~~~~~
ジャッジ結果
| セット名 | test_ALL | ||
|---|---|---|---|
| 得点 / 配点 | 2292921 / 2460000 | ||
| 結果 |
|
| セット名 | テストケース |
|---|---|
| test_ALL | test_0000.txt, test_0001.txt, test_0002.txt, test_0003.txt, test_0004.txt, test_0005.txt, test_0006.txt, test_0007.txt, test_0008.txt, test_0009.txt, test_0010.txt, test_0011.txt, test_0012.txt, test_0013.txt, test_0014.txt, test_0015.txt, test_0016.txt, test_0017.txt, test_0018.txt, test_0019.txt, test_0020.txt, test_0021.txt, test_0022.txt, test_0023.txt, test_0024.txt, test_0025.txt, test_0026.txt, test_0027.txt, test_0028.txt, test_0029.txt, test_0030.txt, test_0031.txt, test_0032.txt, test_0033.txt, test_0034.txt, test_0035.txt, test_0036.txt, test_0037.txt, test_0038.txt, test_0039.txt, test_0040.txt, test_0041.txt, test_0042.txt, test_0043.txt, test_0044.txt, test_0045.txt, test_0046.txt, test_0047.txt, test_0048.txt, test_0049.txt, test_0050.txt, test_0051.txt, test_0052.txt, test_0053.txt, test_0054.txt, test_0055.txt, test_0056.txt, test_0057.txt, test_0058.txt, test_0059.txt, test_0060.txt, test_0061.txt, test_0062.txt, test_0063.txt, test_0064.txt, test_0065.txt, test_0066.txt, test_0067.txt, test_0068.txt, test_0069.txt, test_0070.txt, test_0071.txt, test_0072.txt, test_0073.txt, test_0074.txt, test_0075.txt, test_0076.txt, test_0077.txt, test_0078.txt, test_0079.txt, test_0080.txt, test_0081.txt, test_0082.txt, test_0083.txt, test_0084.txt, test_0085.txt, test_0086.txt, test_0087.txt, test_0088.txt, test_0089.txt, test_0090.txt, test_0091.txt, test_0092.txt, test_0093.txt, test_0094.txt, test_0095.txt, test_0096.txt, test_0097.txt, test_0098.txt, test_0099.txt, test_0100.txt, test_0101.txt, test_0102.txt, test_0103.txt, test_0104.txt, test_0105.txt, test_0106.txt, test_0107.txt, test_0108.txt, test_0109.txt, test_0110.txt, test_0111.txt, test_0112.txt, test_0113.txt, test_0114.txt, test_0115.txt, test_0116.txt, test_0117.txt, test_0118.txt, test_0119.txt, test_0120.txt, test_0121.txt, test_0122.txt, test_0123.txt, test_0124.txt, test_0125.txt, test_0126.txt, test_0127.txt, test_0128.txt, test_0129.txt, test_0130.txt, test_0131.txt, test_0132.txt, test_0133.txt, test_0134.txt, test_0135.txt, test_0136.txt, test_0137.txt, test_0138.txt, test_0139.txt, test_0140.txt, test_0141.txt, test_0142.txt, test_0143.txt, test_0144.txt, test_0145.txt, test_0146.txt, test_0147.txt, test_0148.txt, test_0149.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| test_0000.txt | AC | 1951 ms | 3768 KiB |
| test_0001.txt | AC | 1953 ms | 3860 KiB |
| test_0002.txt | AC | 1952 ms | 3816 KiB |
| test_0003.txt | AC | 1951 ms | 3884 KiB |
| test_0004.txt | AC | 1953 ms | 3872 KiB |
| test_0005.txt | AC | 1952 ms | 3996 KiB |
| test_0006.txt | AC | 1952 ms | 3820 KiB |
| test_0007.txt | AC | 1952 ms | 3900 KiB |
| test_0008.txt | AC | 1953 ms | 3996 KiB |
| test_0009.txt | AC | 1952 ms | 3768 KiB |
| test_0010.txt | AC | 1952 ms | 3836 KiB |
| test_0011.txt | AC | 1952 ms | 3852 KiB |
| test_0012.txt | AC | 1952 ms | 3972 KiB |
| test_0013.txt | AC | 1951 ms | 3900 KiB |
| test_0014.txt | AC | 1952 ms | 3996 KiB |
| test_0015.txt | AC | 1952 ms | 3888 KiB |
| test_0016.txt | AC | 1951 ms | 3824 KiB |
| test_0017.txt | AC | 1952 ms | 3768 KiB |
| test_0018.txt | AC | 1952 ms | 3900 KiB |
| test_0019.txt | AC | 1953 ms | 3872 KiB |
| test_0020.txt | AC | 1952 ms | 3820 KiB |
| test_0021.txt | AC | 1952 ms | 3816 KiB |
| test_0022.txt | AC | 1953 ms | 3816 KiB |
| test_0023.txt | AC | 1952 ms | 3968 KiB |
| test_0024.txt | AC | 1952 ms | 3820 KiB |
| test_0025.txt | AC | 1951 ms | 3996 KiB |
| test_0026.txt | AC | 1952 ms | 3920 KiB |
| test_0027.txt | AC | 1952 ms | 3816 KiB |
| test_0028.txt | AC | 1951 ms | 3768 KiB |
| test_0029.txt | AC | 1953 ms | 3768 KiB |
| test_0030.txt | AC | 1952 ms | 3996 KiB |
| test_0031.txt | AC | 1953 ms | 3860 KiB |
| test_0032.txt | AC | 1953 ms | 3932 KiB |
| test_0033.txt | AC | 1952 ms | 3972 KiB |
| test_0034.txt | AC | 1951 ms | 3900 KiB |
| test_0035.txt | AC | 1953 ms | 3936 KiB |
| test_0036.txt | AC | 1951 ms | 3936 KiB |
| test_0037.txt | AC | 1953 ms | 3920 KiB |
| test_0038.txt | AC | 1952 ms | 3972 KiB |
| test_0039.txt | AC | 1952 ms | 3968 KiB |
| test_0040.txt | AC | 1953 ms | 3888 KiB |
| test_0041.txt | AC | 1951 ms | 3788 KiB |
| test_0042.txt | AC | 1951 ms | 3932 KiB |
| test_0043.txt | AC | 1952 ms | 3976 KiB |
| test_0044.txt | AC | 1951 ms | 3884 KiB |
| test_0045.txt | AC | 1953 ms | 3900 KiB |
| test_0046.txt | AC | 1952 ms | 3920 KiB |
| test_0047.txt | AC | 1951 ms | 3964 KiB |
| test_0048.txt | AC | 1953 ms | 3968 KiB |
| test_0049.txt | AC | 1953 ms | 3900 KiB |
| test_0050.txt | AC | 1951 ms | 3816 KiB |
| test_0051.txt | AC | 1953 ms | 3888 KiB |
| test_0052.txt | AC | 1953 ms | 3900 KiB |
| test_0053.txt | AC | 1953 ms | 3876 KiB |
| test_0054.txt | AC | 1952 ms | 3884 KiB |
| test_0055.txt | AC | 1952 ms | 3900 KiB |
| test_0056.txt | AC | 1951 ms | 3900 KiB |
| test_0057.txt | AC | 1952 ms | 3824 KiB |
| test_0058.txt | AC | 1953 ms | 3864 KiB |
| test_0059.txt | AC | 1952 ms | 3868 KiB |
| test_0060.txt | AC | 1951 ms | 3840 KiB |
| test_0061.txt | AC | 1952 ms | 3900 KiB |
| test_0062.txt | AC | 1953 ms | 3888 KiB |
| test_0063.txt | AC | 1953 ms | 3872 KiB |
| test_0064.txt | AC | 1952 ms | 3856 KiB |
| test_0065.txt | AC | 1951 ms | 3804 KiB |
| test_0066.txt | AC | 1952 ms | 3900 KiB |
| test_0067.txt | AC | 1953 ms | 3836 KiB |
| test_0068.txt | AC | 1951 ms | 3900 KiB |
| test_0069.txt | AC | 1953 ms | 3884 KiB |
| test_0070.txt | AC | 1952 ms | 3816 KiB |
| test_0071.txt | AC | 1952 ms | 3972 KiB |
| test_0072.txt | AC | 1952 ms | 3856 KiB |
| test_0073.txt | AC | 1952 ms | 3820 KiB |
| test_0074.txt | AC | 1952 ms | 3768 KiB |
| test_0075.txt | AC | 1952 ms | 3768 KiB |
| test_0076.txt | AC | 1952 ms | 3824 KiB |
| test_0077.txt | AC | 1952 ms | 3888 KiB |
| test_0078.txt | AC | 1952 ms | 3856 KiB |
| test_0079.txt | AC | 1951 ms | 3972 KiB |
| test_0080.txt | AC | 1953 ms | 3872 KiB |
| test_0081.txt | AC | 1951 ms | 3900 KiB |
| test_0082.txt | AC | 1951 ms | 3836 KiB |
| test_0083.txt | AC | 1952 ms | 3932 KiB |
| test_0084.txt | AC | 1952 ms | 3972 KiB |
| test_0085.txt | AC | 1951 ms | 3824 KiB |
| test_0086.txt | AC | 1952 ms | 3824 KiB |
| test_0087.txt | AC | 1953 ms | 3888 KiB |
| test_0088.txt | AC | 1952 ms | 3968 KiB |
| test_0089.txt | AC | 1953 ms | 3876 KiB |
| test_0090.txt | AC | 1952 ms | 3860 KiB |
| test_0091.txt | AC | 1952 ms | 3932 KiB |
| test_0092.txt | AC | 1951 ms | 3932 KiB |
| test_0093.txt | AC | 1952 ms | 3900 KiB |
| test_0094.txt | AC | 1952 ms | 3920 KiB |
| test_0095.txt | AC | 1953 ms | 3996 KiB |
| test_0096.txt | AC | 1952 ms | 3824 KiB |
| test_0097.txt | AC | 1952 ms | 3888 KiB |
| test_0098.txt | AC | 1952 ms | 3808 KiB |
| test_0099.txt | AC | 1953 ms | 3884 KiB |
| test_0100.txt | AC | 1953 ms | 3936 KiB |
| test_0101.txt | AC | 1951 ms | 3768 KiB |
| test_0102.txt | AC | 1953 ms | 3888 KiB |
| test_0103.txt | AC | 1952 ms | 3760 KiB |
| test_0104.txt | AC | 1952 ms | 3920 KiB |
| test_0105.txt | AC | 1953 ms | 3932 KiB |
| test_0106.txt | AC | 1952 ms | 3892 KiB |
| test_0107.txt | AC | 1952 ms | 3968 KiB |
| test_0108.txt | AC | 1952 ms | 3872 KiB |
| test_0109.txt | AC | 1952 ms | 3964 KiB |
| test_0110.txt | AC | 1951 ms | 3968 KiB |
| test_0111.txt | AC | 1951 ms | 3848 KiB |
| test_0112.txt | AC | 1952 ms | 3968 KiB |
| test_0113.txt | AC | 1952 ms | 3740 KiB |
| test_0114.txt | AC | 1952 ms | 3768 KiB |
| test_0115.txt | AC | 1952 ms | 3900 KiB |
| test_0116.txt | AC | 1952 ms | 3972 KiB |
| test_0117.txt | AC | 1951 ms | 3768 KiB |
| test_0118.txt | AC | 1952 ms | 3964 KiB |
| test_0119.txt | AC | 1952 ms | 3884 KiB |
| test_0120.txt | AC | 1951 ms | 3972 KiB |
| test_0121.txt | AC | 1951 ms | 3816 KiB |
| test_0122.txt | AC | 1952 ms | 3872 KiB |
| test_0123.txt | AC | 1952 ms | 3828 KiB |
| test_0124.txt | AC | 1951 ms | 3884 KiB |
| test_0125.txt | AC | 1953 ms | 3768 KiB |
| test_0126.txt | AC | 1953 ms | 3820 KiB |
| test_0127.txt | AC | 1953 ms | 3936 KiB |
| test_0128.txt | AC | 1952 ms | 3900 KiB |
| test_0129.txt | AC | 1952 ms | 3828 KiB |
| test_0130.txt | AC | 1953 ms | 3856 KiB |
| test_0131.txt | AC | 1953 ms | 3816 KiB |
| test_0132.txt | AC | 1952 ms | 3808 KiB |
| test_0133.txt | AC | 1953 ms | 3820 KiB |
| test_0134.txt | AC | 1953 ms | 3856 KiB |
| test_0135.txt | AC | 1952 ms | 3976 KiB |
| test_0136.txt | AC | 1952 ms | 3968 KiB |
| test_0137.txt | AC | 1952 ms | 3768 KiB |
| test_0138.txt | AC | 1952 ms | 3808 KiB |
| test_0139.txt | AC | 1953 ms | 3836 KiB |
| test_0140.txt | AC | 1952 ms | 3780 KiB |
| test_0141.txt | AC | 1952 ms | 3876 KiB |
| test_0142.txt | AC | 1952 ms | 3884 KiB |
| test_0143.txt | AC | 1952 ms | 3820 KiB |
| test_0144.txt | AC | 1951 ms | 3848 KiB |
| test_0145.txt | AC | 1952 ms | 3936 KiB |
| test_0146.txt | AC | 1952 ms | 3824 KiB |
| test_0147.txt | AC | 1951 ms | 3836 KiB |
| test_0148.txt | AC | 1953 ms | 3908 KiB |
| test_0149.txt | AC | 1951 ms | 3820 KiB |