Submission #50876874


Source Code Expand

#include <algorithm>
#include <array>
#include <cassert>
#include <climits>
#include <complex>
#include <cstdio>
#include <cstring>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <map>
#include <numeric>
#include <optional>
#include <queue>
#include <random>
#include <set>
#include <string>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <vector>

#define LOG(x) cerr << #x << " = " << x << endl
#define dump(x) cerr << "L" << __LINE__ << ": " << #x << " = " << (x) << endl
using namespace std;

// template <typename T> T &chmin(T &a, const T &b) { return a = min(a, b); }
// template <typename T> T &chmax(T &a, const T &b) { return a = max(a, b); }

// using ll = long long;
// using ld = long double;
// using P = pair<int,int>;

int T, N;
std::vector<std::vector<int> > V;
std::vector<std::vector<int> > H;
std::vector<std::vector<int> > A;

namespace ats5515 {
const int64_t CYCLES_PER_SEC = 2900000000;
const double TIMELIMIT = 2.95;
struct Timer {
	int64_t start;
	Timer() { reset(); }
	void reset() { start = getCycle(); }
	void plus(double a) { start -= (a * CYCLES_PER_SEC); }
	inline double get() { return (double)(getCycle() - start) / CYCLES_PER_SEC; }
	inline int64_t getCycle() {
		uint32_t low, high;
		__asm__ volatile("rdtsc" : "=a"(low), "=d"(high));
		return ((int64_t)low) | ((int64_t)high << 32);
	}
};
class XorShift {
   public:
	unsigned int x, y, z, w;
	double nL[65536];

	XorShift() {
		init();
	}

	void init() {
		x = 314159265;
		y = 358979323;
		z = 846264338;
		w = 327950288;
		double n = 1 / (double)(2 * 65536);
		for (int i = 0; i < 65536; i++) {
			nL[i] = log(((double)i / 65536) + n);
		}
	}

	inline unsigned int next() {
		unsigned int t = x ^ x << 11;
		x = y;
		y = z;
		z = w;
		return w = w ^ w >> 19 ^ t ^ t >> 8;
	}

	inline double nextLog() {
		return nL[next() & 0xFFFF];
	}

	inline int nextInt(int m) {
		return (int)(next() % m);
	}

	int nextInt(int min, int max) {
		return min + nextInt(max - min + 1);
	}

	inline double nextDouble() {
		return (double)next() / ((long long)1 << 32);
	}
};
XorShift rnd;
const int DX[4] = {1, 0, -1, 0};
const int DY[4] = {0, 1, 0, -1};
const int REV[4] = {2, 3, 0, 1};
const char DIRCHAR[4] = {'D', 'R', 'U', 'L'};
std::vector<std::vector<int> > distance_matrix;
std::vector<std::vector<int> > adjacent_cells;
std::vector<std::vector<int> > near_cells;
void precalc_distance_matrix() {
	distance_matrix.resize(N * N);
	adjacent_cells.resize(N * N);
	for (int i = 0; i < N * N; i++) {
		distance_matrix[i].resize(N * N, (int)1e9);
	}
	for (int i = 0; i < N * N; i++) {
		distance_matrix[i][i] = 0;
		int x = i / N;
		int y = i % N;

		if (x < N - 1) {
			if (H[x][y] == 0) {
				int j = (x + 1) * N + y;
				adjacent_cells[i].push_back(j);
				adjacent_cells[j].push_back(i);
			}
		}
		if (y < N - 1) {
			if (V[x][y] == 0) {
				int j = x * N + y + 1;
				adjacent_cells[i].push_back(j);
				adjacent_cells[j].push_back(i);
			}
		}
	}

	for (int i = 0; i < N * N; i++) {
		queue<int> qu;
		qu.push(i);
		while (!qu.empty()) {
			int j = qu.front();
			qu.pop();
			for (int &k : adjacent_cells[j]) {
				if (distance_matrix[i][k] > distance_matrix[i][j] + 1) {
					distance_matrix[i][k] = distance_matrix[i][j] + 1;
					qu.push(k);
				}
			}
		}
	}

	near_cells.resize(N * N);
	for (int i = 0; i < N * N; i++) {
		for (int j = 0; j < N * N; j++) {
			if (distance_matrix[i][j] <= 10) {
				near_cells[i].push_back(j);
			}
		}
	}
}
int N_boundary = 20;
Timer timer;
pair<vector<pair<int, int> >, int> solve_once(double timelimit, int noise) {
	int N2 = N * N;
	int cur_pos1 = -1;
	int cur_pos2 = -1;
	int turns_left = 4 * N2;

	// turns_left = 1;
	vector<pair<int, int> > res;
	std::vector<int> cur_A(N2, 0);
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			cur_A[i * N + j] = A[i][j];
		}
	}
	long int total_score_diff = 0;
	int cntmax = 100000;
	vector<pair<int, int> > N2_pairs;
	if (N <= N_boundary) {
		for (int i = 0; i < N * N; i++) {
			for (int j = 0; j < i; j++) {
				N2_pairs.emplace_back(i, j);
			}
		}
		cntmax = N2_pairs.size();
	} else {
		if (N >= 30) {
			cntmax = 100000;
		}
		if (N >= 40) {
			cntmax = 100000;
		}
		if (N >= 50) {
			cntmax = 40000;
		}
		if (N >= 100) {
			cntmax = 10000;
		}
	}

	double last_iter_time = -1;
	int niters = 0;
	while (turns_left > 0) {
		double cur_time = timer.get();
		if (cur_time > timelimit) break;
		double best_eval_diff = 1e-5;
		int best_score_diff = -1;
		int best_pos1 = -1;
		int best_pos2 = -1;
		int best_turns_left = 0;
		int cnt = 0;
		if (N > N_boundary) {
			if (last_iter_time > 0) {
				double move_per_turn = (4 * N2 - turns_left) / (double)(res.size());
				double expected_iters_left = turns_left / move_per_turn;
				double time_left = timelimit - cur_time;
				double next_iter_timelimit = time_left / max(1.0, expected_iters_left);
				double new_cntmax = (cntmax / last_iter_time) * next_iter_timelimit;
				double progress1to0 = 4.0 * N2 / turns_left;
				cntmax = 0.1 * cntmax + 0.9 * new_cntmax;
				cntmax = min(cntmax, 200000) * (1 + progress1to0 * 0.4);
				// if (niters % 100 == 0) {
				// 	cerr << "cntmax = " << cntmax << endl;
				// }
			}
		}
		niters++;

		// for (int i = 0; i < N2; i++) {
		// 	if (timer.get() > 1.8) break;
		// 	for (int j = 0; j < i; j++) {
		{
			while (cnt < cntmax) {
				if ((cnt & ((1 << 8) - 1)) == 0) {
					if (timer.get() > timelimit) break;
				}
				// if (best_pos1 == -1 && cnt >= 100) break;
				int i;
				int j;
				if (N <= N_boundary) {
					i = N2_pairs[cnt].first;
					j = N2_pairs[cnt].second;
				} else {
					if (cur_pos1 == -1) {
						// if(true){
						i = rnd.nextInt(N2);
						j = rnd.nextInt(N2 - 1);
						if (j >= i) j++;
					} else {
						while (true) {
							if (rnd.nextInt(2) == 0) {
								i = rnd.nextInt(N2);
							} else {
								i = near_cells[cur_pos1][rnd.nextInt(near_cells[cur_pos1].size())];
							}
							if (rnd.nextInt(2) == 0) {
								j = rnd.nextInt(N2);
							} else {
								j = near_cells[cur_pos2][rnd.nextInt(near_cells[cur_pos2].size())];
							}
							if (i != j) break;
						}
					}
				}
				cnt++;
				// cerr << i << " " << j << " " << turns_left << endl;
				int turns_take = 1;
				int new_pos1, new_pos2;
				if (cur_pos1 != -1) {
					int turns_take1 = max(distance_matrix[cur_pos1][i], distance_matrix[cur_pos2][j]);
					int turns_take2 = max(distance_matrix[cur_pos1][j], distance_matrix[cur_pos2][i]);
					if (turns_take1 <= turns_take2) {
						new_pos1 = i;
						new_pos2 = j;
						turns_take = turns_take1;
					} else {
						new_pos1 = j;
						new_pos2 = i;
						turns_take = turns_take2;
					}
				} else {
					new_pos1 = i;
					new_pos2 = j;
				}
				if (turns_left < turns_take) continue;
				// calc_score_diff
				int score_diff = 0;
				for (int k : adjacent_cells[new_pos1]) {
					if (k == new_pos2) continue;
					score_diff -= (cur_A[new_pos1] - cur_A[k]) * (cur_A[new_pos1] - cur_A[k]);
					score_diff += (cur_A[new_pos2] - cur_A[k]) * (cur_A[new_pos2] - cur_A[k]);
				}
				for (int k : adjacent_cells[new_pos2]) {
					if (k == new_pos1) continue;
					score_diff -= (cur_A[new_pos2] - cur_A[k]) * (cur_A[new_pos2] - cur_A[k]);
					score_diff += (cur_A[new_pos1] - cur_A[k]) * (cur_A[new_pos1] - cur_A[k]);
				}
				// swap(cur_A[new_pos1], cur_A[new_pos2]);
				// for (int k : adjacent_cells[new_pos1]) {
				// 	score_diff += (cur_A[new_pos1] - cur_A[k]) * (cur_A[new_pos1] - cur_A[k]);
				// }
				// for (int k : adjacent_cells[new_pos2]) {
				// 	if (k == new_pos1) continue;
				// 	score_diff += (cur_A[new_pos2] - cur_A[k]) * (cur_A[new_pos2] - cur_A[k]);
				// }
				// swap(cur_A[new_pos1], cur_A[new_pos2]);

				double eval_diff = score_diff / (turns_take + 0.0);
				if (noise > 0) {
					eval_diff += rnd.nextDouble() * 100;
				}
				if (best_eval_diff > eval_diff) {
					best_eval_diff = eval_diff;
					best_score_diff = score_diff;
					best_pos1 = new_pos1;
					best_pos2 = new_pos2;
					best_turns_left = turns_left - turns_take;
				}
			}
		}

		if (best_eval_diff > 0) {
			break;
		}
		cur_pos1 = best_pos1;
		cur_pos2 = best_pos2;
		turns_left = best_turns_left;
		total_score_diff += best_score_diff;
		swap(cur_A[cur_pos1], cur_A[cur_pos2]);
		res.emplace_back(best_pos1, best_pos2);
		// cerr << best_score_diff << endl;
		double end_time = timer.get();
		last_iter_time = end_time - cur_time;
	}
	cerr << "total_score_diff = " << total_score_diff << endl;
	return pair<vector<pair<int, int> >, int>(res, total_score_diff);
}

void output(vector<pair<int, int> > &res) {
	cout << res[0].first / N << " " << res[0].first % N << " " << res[0].second / N << " " << res[0].second % N << '\n';
	int n_moves = 0;
	for (int i = 1; i < (int)res.size(); i++) {
		// cerr << "res " << i << "/" << res.size() <<" " <<  res[i].first / N << " " << res[i].first % N << " " << res[i].second / N << " " << res[i].second % N << '\n';
		int do_swap = 1;
		int pos[2];
		int pos_to[2];
		pos[0] = res[i - 1].first;
		pos[1] = res[i - 1].second;
		pos_to[0] = res[i].first;
		pos_to[1] = res[i].second;

		while (pos[0] != pos_to[0] || pos[1] != pos_to[1]) {
			char dir_char[2];

			for (int j = 0; j < 2; j++) {
				if (pos[j] == pos_to[j]) {
					dir_char[j] = '.';
					continue;
				}
				int x = pos[j] / N;
				int y = pos[j] % N;
				for (int dir = 0; dir < 4; dir++) {
					int xx = x + DX[dir];
					int yy = y + DY[dir];
					if (xx >= 0 && xx < N && yy >= 0 && yy < N) {
						int k = xx * N + yy;
						if (distance_matrix[pos[j]][k] == 1 &&
							(distance_matrix[pos[j]][pos_to[j]] > distance_matrix[k][pos_to[j]])) {
							dir_char[j] = DIRCHAR[dir];
							pos[j] = k;
							break;
						}
					}
				}
			}
			n_moves++;
			cout << do_swap << " " << dir_char[0] << " " << dir_char[1] << '\n';
			do_swap = 0;
		}
	}
	cout << "1 . ." << '\n';
	n_moves++;
	cerr << res.size() << endl;
	cerr << n_moves << endl;

	// for (int i = 0; i < N; i++) {
	// 	for (int j = 0; j < N; j++) {
	// 		cerr << cur_A[i * N + j] << " ";
	// 	}
	// 	cerr << endl;
	// }

	cerr << "time = " << timer.get() << endl;
}

void solve() {
	cerr << "N = " << N << endl;
	precalc_distance_matrix();
	cerr << timer.get() << endl;
	if (N <= N_boundary) {
	//if (false) {
		int best_score = 0;
		double timelimit = 1.95;
		vector<pair<int, int> > bestres;
		int noise = 0;
		while (true) {
			pair<vector<pair<int, int> >, int> res;
			res = solve_once(timelimit, noise);

			if (best_score > res.second) {
				best_score = res.second;
				bestres = res.first;
			}
			if (timer.get() > timelimit) {
				break;
			}
			noise++;
		}
		output(bestres);
	} else {
		double timelimit = 1.95;
		pair<vector<pair<int, int> >, int> res;
		res = solve_once(timelimit, 0);
		output(res.first);

	}
}
}  // namespace ats5515

namespace asi1024 {

class Timer {
public:
  int64_t start, stop;
  static const int64_t CYCLES_PER_SEC = 2900000000;
  inline int64_t get_cycle() const {
    uint32_t low, high;
    __asm__ volatile("rdtsc" : "=a"(low), "=d"(high));
    return int64_t(low) | (int64_t(high) << 32);
  }
  Timer(double time_limit) :
    start(get_cycle()), stop(start + time_limit * CYCLES_PER_SEC) {}
  Timer() : Timer(0) {}
  inline bool within(int64_t end) const { return get_cycle() < end; }
  inline bool within() const { return within(stop); }
};

Timer timer(1.95);

const int dx[8] = {1, 0, -1, 0, 0};
const int dy[8] = {0, 1, 0, -1, 0};
int BEAM_WIDTH;

using ll = long long;
using ull = unsigned long long;
using Op2 = std::tuple<int, char, char>;

struct State {
  std::vector<short> board;
  std::vector<Op2> ops;
  int y1, x1, y2, x2;
  ll d2;

  int val(int y, int x) const {
    return board[y * N + x];
  }
  int dist_(int y1, int x1, int y2, int x2) const {
    int vd = val(y1, x1) - val(y2, x2);
    return vd * vd;
  }

  void reset_d2() {
    d2 = 0;
    for (int i = 0; i < N; ++i) {
      for (int j = 0; j < N - 1; ++j) {
        if (V[i][j] == 0) {
          d2 += dist_(i, j, i, j + 1);
        }
      }
    }
    for (int i = 0; i < N - 1; ++i) {
      for (int j = 0; j < N; ++j) {
        if (H[i][j] == 0) {
          d2 += dist_(i, j, i + 1, j);
        }
      }
    }
  }

  State() {}

  State(int y1, int x1, int y2, int x2): y1(y1), x1(x1), y2(y2), x2(x2), d2(0) {
    board.resize(N * N);
    for (int i = 0; i < N; ++i) {
      for (int j = 0; j < N; ++j) {
        board[i * N + j] = A[i][j];
      }
    }
    reset_d2();
    ops.emplace_back(0, '.', '.');
  }

  void swap() {
    std::swap(board[y1 * N + x1], board[y2 * N + x2]);
    reset_d2();
  }

  ull hash() const {
    ull h = y1;
    h = h * 10007 + x1;
    h = h * 10007 + y2;
    h = h * 10007 + x2;
    h = h * 1000000007 + val(y1, x1);
    h = h * 1000000007 + val(y2, x2);
    return h;
  }
};

std::vector<Op2> beam_search(int sy1, int sx1, int sy2, int sx2) {
  int64_t start = timer.get_cycle();
  std::map<ull, State> states;
  ll init_d = -1;
  {
    State state(sy1, sx1, sy2, sx2);
    ull h = state.hash();
    init_d = state.d2;
    LOG(init_d);
    states[h] = state;
  }
  for (int i = 0; i < N * N * 4 - 1; ++i) {
    std::map<ull, State> next_states;
    auto push = [&](const State& state) {
      ull h = state.hash();
      if (next_states.count(h) == 0) {
        next_states[h] = state;
      } else if (next_states[h].d2 > state.d2) {
        next_states[h] = state;
      }
    };
    for (auto &pair : states) {
      State state = pair.second;
      int y1 = state.y1, x1 = state.x1, y2 = state.y2, x2 = state.x2;
      for (int dir1 = 0; dir1 < 5; ++dir1) {
        int ny1 = y1 + dy[dir1], nx1 = x1 + dx[dir1];
        if (ny1 < 0 || ny1 >= N || nx1 < 0 || nx1 >= N) continue;
        if (dir1 == 0 && V[y1][x1]) continue;
        if (dir1 == 1 && H[y1][x1]) continue;
        if (dir1 == 2 && V[y1][nx1]) continue;
        if (dir1 == 3 && H[ny1][x1]) continue;
        for (int dir2 = 0; dir2 < 5; ++dir2) {
          double elapsed = (timer.get_cycle() - start) / (double)Timer::CYCLES_PER_SEC;
          if (elapsed > 1.8 * (i + 1) / (N * N * 4) && next_states.size() >= 1) {
            break;
          }
          if (dir1 == 4 && dir2 == 4) continue;
          int ny2 = y2 + dy[dir2], nx2 = x2 + dx[dir2];
          if (ny2 < 0 || ny2 >= N || nx2 < 0 || nx2 >= N) continue;
          if (dir2 == 0 && V[y2][x2]) continue;
          if (dir2 == 1 && H[y2][x2]) continue;
          if (dir2 == 2 && V[y2][nx2]) continue;
          if (dir2 == 3 && H[ny2][x2]) continue;
          State next_state = state;
          std::get<1>(next_state.ops.back()) = "RDLU."[dir1];
          std::get<2>(next_state.ops.back()) = "RDLU."[dir2];
          next_state.ops.emplace_back(0, '.', '.');
          next_state.y1 = ny1;
          next_state.x1 = nx1;
          next_state.y2 = ny2;
          next_state.x2 = nx2;
          push(next_state);
          std::get<0>(next_state.ops.back()) = 1;
          next_state.swap();
          push(next_state);
        }
      }
    }

    std::vector<State> sorted_states;
    sorted_states.reserve(next_states.size());
    for (auto &pair : next_states) {
      sorted_states.emplace_back(pair.second);
    }
    std::sort(sorted_states.begin(), sorted_states.end(), [](const State &s1, const State &s2) {
      return s1.d2 < s2.d2;
    });
    if (sorted_states.size() > BEAM_WIDTH) sorted_states.resize(BEAM_WIDTH);
    states.clear();

    for (const State &state : sorted_states) {
      states[state.hash()] = state;
    }
    std::cerr << "beam_search: " << i << " " << states.size() << " " << sorted_states[0].d2 << std::endl;
  }
  
  std::optional<State> best_state = std::nullopt;
  for (auto &pair : states) {
    if (!best_state.has_value() || best_state->d2 > pair.second.d2) {
      best_state = pair.second;
    }
  }
  assert(best_state.has_value());
  LOG(best_state->d2);
  int score = std::max(1.0, std::round(1e6 * (std::log2(init_d) - std::log2(best_state->d2))));
  LOG(score);
  return best_state->ops;
}

void solve() {
  BEAM_WIDTH = 2;
  if (T == 0) BEAM_WIDTH = 200;
  else if (T == 1) BEAM_WIDTH = 200;
  else if (T == 2) BEAM_WIDTH = 25;
  else if (T == 3) BEAM_WIDTH = 15;
  else if (T == 4) BEAM_WIDTH = 10;
  else if (T == 5) BEAM_WIDTH = 6;
  else if (T == 6) BEAM_WIDTH = 6;
  else if (T == 7) BEAM_WIDTH = 15;
  else if (T == 8) BEAM_WIDTH = 6;
  else if (T == 9) BEAM_WIDTH = 1;
  else if (T == 10) BEAM_WIDTH = 1;
  else if (T == 11) BEAM_WIDTH = 1;
  else if (T == 12) BEAM_WIDTH = 1;
  else if (T == 13) BEAM_WIDTH = 1;
  else if (T == 14) BEAM_WIDTH = 1;
  else if (T == 15) BEAM_WIDTH = 1;
  else if (T == 16) BEAM_WIDTH = 1;
  else if (T == 17) BEAM_WIDTH = 1;
  else if (T == 18) BEAM_WIDTH = 1;
  else if (T == 19) BEAM_WIDTH = 1;
  BEAM_WIDTH *= 2;
  // if (T != 9) {
  //   std::cout << "0 0 0 0" << std::endl;
  //   return;
  // }

  int sy1 = 0, sx1 = 0, sy2 = N - 1, sx2 = N - 1;
  std::vector<std::vector<int>> visited(N, std::vector<int>(N, 0));
  auto ops = beam_search(sy1, sx1, sy2, sx2);

  std::cout << sy1 << " " << sx1 << " " << sy2 << " " << sx2 << std::endl;
  for (auto [t, c1, c2] : ops) {
    std::cout << t << " " << c1 << " " << c2 << std::endl;
  }
  double elapsed = (timer.get_cycle() - timer.start) / (double)Timer::CYCLES_PER_SEC;
  LOG(elapsed);
}

} // namespace asi1024



namespace hog {
  using vi = vector<int>;
  using ll = long long;
  using pii = pair<int, int>;
  using vll = vector<ll>;
  vector<vector<pair<int, char> > > graph;
  vector<vi> distance_matrix;

  vi A2;
  // vi desired;
  int GN;
  const ll INF = 1e18;
  const int INF2 = 5e8;
  int dx[]={0, 1, 0, -1}, dy[] = {1, 0, -1, 0};
  template<class T> bool chmax(T &a, const T &b) { if (a < b) { a = b; return true; } return false; }
  template<class T> bool chmin(T &a, const T &b) { if (a > b) { a = b; return true; } return false; }
  template<class T> void debug(T a, T b) { for (; a != b; ++a) cerr << *a << ' '; cerr << endl;}
  template<class T> T square(const T& x) { return x * x; }



  void dfs(int v, vi& path, vector<bool>& visited) {
    visited[v] = true;
    path.push_back(v);
    for (auto u : graph[v]) {
      int to = u.first;
      if (!visited[to]) {
        dfs(to, path, visited);
        // path.push_back(v);
      }
    }
  }
  vi create_path(int s) {
    vector<bool> visited(GN);
    vi path;
    dfs(s, path, visited);
    return path;
  }

  ll calc_score(const vi& ar) {
    ll score = 0;
    for (int i = 0; i < GN; ++i) {
      for (auto e: graph[i]) {
        int to = e.first;
        score += square(ar[i] - ar[to]);
      }
    }
    return score;
  }

  void create_distance_matrix() {
    distance_matrix.resize(GN, vi(GN, INF2));
    for (int i = 0; i < GN; ++i) {
      queue<int> q;
      distance_matrix[i][i] = 0;
      q.push(i);
      while (!q.empty()) {
        int v = q.front(); q.pop();
        for (auto e : graph[v]) {
          int u = e.first;
          if (distance_matrix[i][u] == INF2) {
            distance_matrix[i][u] = distance_matrix[i][v] + 1;
            q.push(u);
          }
        }
      }
    }
  }
  vi get_path(int s, int t) {
    vi path;
    int dist = distance_matrix[s][t];
    while (s != t) {
      path.push_back(t);
      bool found = false;
      for (auto e : graph[t]) {
        if (distance_matrix[s][e.first] == dist - 1) {
          t = e.first;
          found = true;
          break;
        }
      }
      assert(found);
      --dist;
    }
    path.push_back(s);
    reverse(path.begin(), path.end());
    return path;
  }


  void main_hog() {
    GN = N * N;
    dump(GN);
    graph.resize(GN);
    for (int i = 0; i < N; ++i) {
      for (int j = 0; j < N; ++j) {
        A2.push_back(A[i][j]);
        if (j < N-1 && !V[i][j]) {
          graph[i * N + j].push_back({i * N + j + 1, 'R'});
          graph[i * N + j + 1].push_back({i * N + j, 'L'});
        }
        if (i < N-1 && !H[i][j]) {
          graph[i * N + j].push_back({(i + 1) * N + j, 'D'});
          graph[(i + 1) * N + j].push_back({i * N + j, 'U'});
        }
      }
    }
    assert(A2.size() == GN);
    ll orig_score = calc_score(A2);
    dump(orig_score);
    for (int i = 0; i < GN; ++i) assert(graph[i].size() <= 4);
    create_distance_matrix();
    vi path = create_path(0);
    const int M = path.size();
    assert(M==GN);
    dump(M);
    vector<pii> moves;
    vi A3 = A2;
    int block = M / 2, thr;
    int i = 0, j = block;
    while (moves.size() <= 4 * GN && block > 2) {
      thr = block;
      int cnt = 0;
      i = 0;
      j = block;
      dump(i);dump(j);dump(block);

      while (j < M) { // todo: fix boundary
        chmax(j, i+1);
        if (j >= M) break;
        if (cnt >= block) {
          thr += block * 2;
          cnt -= block * 2;
        }
        if (A2[path[i]] >= thr && A2[path[j]] < thr) {
          assert(i < GN); assert(j < GN);
          assert(path[i] < GN);
          assert(path[j] < GN);
          dump(i);dump(j);dump(path[i]);dump(path[j]);
          swap(A2[path[i]], A2[path[j]]);
          moves.push_back({path[i], path[j]});
          ++i;++j;++cnt;
        }else if (A2[path[i]] >= thr) {
          ++j;
        } else if (A2[path[j]] < thr) {
          ++i;++cnt;
        } else {
          ++i;++j;++cnt;
        }
      }
      dump(i);
      assert(j==GN);
      block /= 2;
      i = GN - block-1;
      j = GN - 1;
      thr = GN - block;
      cnt = 0;
      while (true) {
        chmin(i, j-1);
        if (i < 0) break;
        dump(i);dump(j);
        if (cnt >= block) {
          thr -= block * 2;
          cnt -= block * 2;
        }
        if (A2[path[i]] >= thr && A2[path[j]] < thr) {
          moves.push_back({path[i], path[j]});
          swap(A2[path[i]], A2[path[j]]);
          --i;--j;++cnt;
        } else if (A2[path[i]] >= thr) {
          --j;++cnt;
        } else if (A2[path[j]] < thr) {
          --i;
        } else {
          --i;--j;++cnt;
        }
      }
      assert(i==-1);
      block /= 2;
    }
    moves.resize(4 * GN);

    // output
    auto ps1 = moves[0].first, ps2 = moves[0].second;

    printf("%d %d %d %d\n", ps1 / N, ps1 % N, ps2 / N, ps2 % N);
    auto get_command=[&](int p1, int p2) {
      if (p1 == p2) return '.';
      for (int i = 0; i < graph[p1].size(); ++i) {
        if (graph[p1][i].first == p2) return graph[p1][i].second;
      }
      assert(false);
      return 'X';
    };
    vector<tuple<bool, char, char> > ans;
    for (int i = 0; i < moves.size() && ans.size() < 4 * GN; ++i) {
      auto [p1, p2] = moves[i];
      dump(p1);dump(p2);

      bool is_swap =true;
      // if (A2[p1] > A2[p2]) {
      //   is_swap = true;
      //   swap(A2[p1], A2[p2]);
      // }
      assert(is_swap);
      swap(A3[p1], A3[p2]);
      if (i + 1 >= moves.size()) {
        ans.push_back({is_swap, '.', '.'});
      } else {
        auto [p1n, p2n] = moves[i + 1];
        auto path1 = get_path(p1, p1n), path2 = get_path(p2, p2n);
        assert(!path1.empty());
        assert(!path2.empty());
        for (int j = 0; j + 1 < max(path1.size(), path2.size()); ++j) {
          if (j + 1 >= path1.size()) path1.push_back(path1.back());
          if (j + 1 >= path2.size()) path2.push_back(path2.back());
          ans.push_back({is_swap, get_command(path1[j], path1[j+1]), get_command(path2[j], path2[j+1])});
          is_swap = false;
        }
      }
    }
    ans.resize(4 * GN);
    ll new_score = calc_score(A3);
    dump(orig_score);dump(new_score);
    dump(log((orig_score / (double)new_score)) / log(2.0));
    for (auto a: ans) {
      auto [is_swap, c1, c2] = a;
      printf("%d %c %c\n", (int)is_swap, c1, c2);
    }
  }
}; // namespace hog

void parse_input() {
	string line;
	cin >> T >> N;
	V.resize(N);
	for (int i = 0; i < N; i++) {
		V[i].resize(N - 1);
		cin >> line;
		for (int j = 0; j < N - 1; j++) {
			V[i][j] = line[j] == '1';
		}
	}
	H.resize(N - 1);
	for (int i = 0; i < N - 1; i++) {
		H[i].resize(N);
		cin >> line;
		for (int j = 0; j < N; j++) {
			H[i][j] = line[j] == '1';
		}
	}
	A.resize(N);
	for (int i = 0; i < N; i++) {
		A[i].resize(N);
		for (int j = 0; j < N; j++) {
			cin >> A[i][j];
		}
	}
}

int main() {
	parse_input();
  if (T <= 1) asi1024::solve();
  else if (T == 15) hog::main_hog();
  else ats5515::solve();
	// cout << "0 0 0 0" << std::endl;
}

Submission Info

Submission Time
Task A - Smoothing by Swaps
User hogloid
Language C++ 20 (gcc 12.2)
Score 936856046
Code Size 25275 Byte
Status AC
Exec Time 1975 ms
Memory 405180 KiB

Compile Error

Main.cpp: In function ‘std::vector<std::tuple<int, char, char> > asi1024::beam_search(int, int, int, int)’:
Main.cpp:585:30: warning: comparison of integer expressions of different signedness: ‘std::vector<asi1024::State>::size_type’ {aka ‘long unsigned int’} and ‘int’ [-Wsign-compare]
  585 |     if (sorted_states.size() > BEAM_WIDTH) sorted_states.resize(BEAM_WIDTH);
      |         ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
In file included from /usr/include/c++/12/cassert:44,
                 from Main.cpp:3:
Main.cpp: In function ‘void hog::main_hog()’:
Main.cpp:758:22: warning: comparison of integer expressions of different signedness: ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} and ‘int’ [-Wsign-compare]
  758 |     assert(A2.size() == GN);
      |            ~~~~~~~~~~^~~~~
Main.cpp:771:25: warning: comparison of integer expressions of different signedness: ‘std::vector<std::pair<int, int> >::size_type’ {aka ‘long unsigned int’} and ‘int’ [-Wsign-compare]
  771 |     while (moves.size() <= 4 * GN && block > 2) {
      |            ~~~~~~~~~~~~~^~~~~~~~~
Main.cpp: In lambda function:
Main.cpp:839:25: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<std::pair<int, char> >::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
  839 |       for (int i = 0; i < graph[p1].size(); ++i) {
      |                       ~~^~~~~~~~~~~~~~~~~~
Main.cpp: In function ‘void hog::main_hog()’:
Main.cpp:846:23: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<std::pair<int, int> >::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
  846 |     for (int i = 0; i < moves.size() && ans.size() < 4 * GN; ++i) {
      |                     ~~^~~~~~~~~~~~~~
Main.cpp:846:52: warning: comparison of integer expressions of different signedness: ‘std::vector<std::tuple<bool, char, char> >::size_type’ {aka ‘long unsigned int’} and ‘int’ [-Wsign-compare]
  846 |     for (int i = 0; i < moves.size() && ans.size() < 4 * GN; ++i) {
      |                                         ~~~~~~~~~~~^~~~~~~~
Main.cpp:857:17: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<std::pair<int, int> >::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
  857 |       if (i + 1 >= moves.size()) {
      |           ~~~~~~^~~~~~~~~~~~~~~
Main.cpp:864:31: warning: comparison of integer expressions of different signedness: ‘int’ and ‘const long unsigned int’ [-Wsign-compare]
  864 |         for (int j = 0; j + 1 < max(path1.size(), path2.size()); ++j) {
      |                         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:865:21: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
  865 |           if (j + 1 >= path1.size()) path1.push_back(path1.back());
      |               ~~~~~~^~~~~~~~~~~~~~~
Main.cpp:866:21: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
  866 |           if (j + 1 >= path2.size()) path2.push_back(path2.back());
      |               ~~~~~~^~~~~~~~~~~~~~~

Judge Result

Set Name test_0 test_1 test_2 test_3 test_4 test_5 test_6 test_7 test_8 test_9 test_10 test_11 test_12 test_13 test_14 test_15 test_16 test_17 test_18 test_19
Score / Max Score 53328286 / 1000000000 55067375 / 1000000000 51036991 / 1000000000 53719776 / 1000000000 47367586 / 1000000000 51136335 / 1000000000 50038802 / 1000000000 43614143 / 1000000000 51547676 / 1000000000 45900949 / 1000000000 49033828 / 1000000000 47336405 / 1000000000 46214777 / 1000000000 45583352 / 1000000000 39615739 / 1000000000 45320069 / 1000000000 46224401 / 1000000000 38655213 / 1000000000 43645884 / 1000000000 32468459 / 1000000000
Status
AC × 10
AC × 10
AC × 10
AC × 10
AC × 10
AC × 10
AC × 10
AC × 10
AC × 10
AC × 10
AC × 10
AC × 10
AC × 10
AC × 10
AC × 10
AC × 10
AC × 10
AC × 10
AC × 10
AC × 10
Set Name Test Cases
test_0 test_0_0000.txt, test_0_0020.txt, test_0_0040.txt, test_0_0060.txt, test_0_0080.txt, test_0_0100.txt, test_0_0120.txt, test_0_0140.txt, test_0_0160.txt, test_0_0180.txt
test_1 test_1_0001.txt, test_1_0021.txt, test_1_0041.txt, test_1_0061.txt, test_1_0081.txt, test_1_0101.txt, test_1_0121.txt, test_1_0141.txt, test_1_0161.txt, test_1_0181.txt
test_2 test_2_0002.txt, test_2_0022.txt, test_2_0042.txt, test_2_0062.txt, test_2_0082.txt, test_2_0102.txt, test_2_0122.txt, test_2_0142.txt, test_2_0162.txt, test_2_0182.txt
test_3 test_3_0003.txt, test_3_0023.txt, test_3_0043.txt, test_3_0063.txt, test_3_0083.txt, test_3_0103.txt, test_3_0123.txt, test_3_0143.txt, test_3_0163.txt, test_3_0183.txt
test_4 test_4_0004.txt, test_4_0024.txt, test_4_0044.txt, test_4_0064.txt, test_4_0084.txt, test_4_0104.txt, test_4_0124.txt, test_4_0144.txt, test_4_0164.txt, test_4_0184.txt
test_5 test_5_0005.txt, test_5_0025.txt, test_5_0045.txt, test_5_0065.txt, test_5_0085.txt, test_5_0105.txt, test_5_0125.txt, test_5_0145.txt, test_5_0165.txt, test_5_0185.txt
test_6 test_6_0006.txt, test_6_0026.txt, test_6_0046.txt, test_6_0066.txt, test_6_0086.txt, test_6_0106.txt, test_6_0126.txt, test_6_0146.txt, test_6_0166.txt, test_6_0186.txt
test_7 test_7_0007.txt, test_7_0027.txt, test_7_0047.txt, test_7_0067.txt, test_7_0087.txt, test_7_0107.txt, test_7_0127.txt, test_7_0147.txt, test_7_0167.txt, test_7_0187.txt
test_8 test_8_0008.txt, test_8_0028.txt, test_8_0048.txt, test_8_0068.txt, test_8_0088.txt, test_8_0108.txt, test_8_0128.txt, test_8_0148.txt, test_8_0168.txt, test_8_0188.txt
test_9 test_9_0009.txt, test_9_0029.txt, test_9_0049.txt, test_9_0069.txt, test_9_0089.txt, test_9_0109.txt, test_9_0129.txt, test_9_0149.txt, test_9_0169.txt, test_9_0189.txt
test_10 test_10_0010.txt, test_10_0030.txt, test_10_0050.txt, test_10_0070.txt, test_10_0090.txt, test_10_0110.txt, test_10_0130.txt, test_10_0150.txt, test_10_0170.txt, test_10_0190.txt
test_11 test_11_0011.txt, test_11_0031.txt, test_11_0051.txt, test_11_0071.txt, test_11_0091.txt, test_11_0111.txt, test_11_0131.txt, test_11_0151.txt, test_11_0171.txt, test_11_0191.txt
test_12 test_12_0012.txt, test_12_0032.txt, test_12_0052.txt, test_12_0072.txt, test_12_0092.txt, test_12_0112.txt, test_12_0132.txt, test_12_0152.txt, test_12_0172.txt, test_12_0192.txt
test_13 test_13_0013.txt, test_13_0033.txt, test_13_0053.txt, test_13_0073.txt, test_13_0093.txt, test_13_0113.txt, test_13_0133.txt, test_13_0153.txt, test_13_0173.txt, test_13_0193.txt
test_14 test_14_0014.txt, test_14_0034.txt, test_14_0054.txt, test_14_0074.txt, test_14_0094.txt, test_14_0114.txt, test_14_0134.txt, test_14_0154.txt, test_14_0174.txt, test_14_0194.txt
test_15 test_15_0015.txt, test_15_0035.txt, test_15_0055.txt, test_15_0075.txt, test_15_0095.txt, test_15_0115.txt, test_15_0135.txt, test_15_0155.txt, test_15_0175.txt, test_15_0195.txt
test_16 test_16_0016.txt, test_16_0036.txt, test_16_0056.txt, test_16_0076.txt, test_16_0096.txt, test_16_0116.txt, test_16_0136.txt, test_16_0156.txt, test_16_0176.txt, test_16_0196.txt
test_17 test_17_0017.txt, test_17_0037.txt, test_17_0057.txt, test_17_0077.txt, test_17_0097.txt, test_17_0117.txt, test_17_0137.txt, test_17_0157.txt, test_17_0177.txt, test_17_0197.txt
test_18 test_18_0018.txt, test_18_0038.txt, test_18_0058.txt, test_18_0078.txt, test_18_0098.txt, test_18_0118.txt, test_18_0138.txt, test_18_0158.txt, test_18_0178.txt, test_18_0198.txt
test_19 test_19_0019.txt, test_19_0039.txt, test_19_0059.txt, test_19_0079.txt, test_19_0099.txt, test_19_0119.txt, test_19_0139.txt, test_19_0159.txt, test_19_0179.txt, test_19_0199.txt
Case Name Status Exec Time Memory
test_0_0000.txt AC 1800 ms 18308 KiB
test_0_0020.txt AC 1800 ms 19036 KiB
test_0_0040.txt AC 1800 ms 18612 KiB
test_0_0060.txt AC 1800 ms 18356 KiB
test_0_0080.txt AC 1800 ms 19656 KiB
test_0_0100.txt AC 1800 ms 20616 KiB
test_0_0120.txt AC 1800 ms 20832 KiB
test_0_0140.txt AC 1800 ms 19752 KiB
test_0_0160.txt AC 1800 ms 19596 KiB
test_0_0180.txt AC 1800 ms 17284 KiB
test_10_0010.txt AC 1952 ms 7292 KiB
test_10_0030.txt AC 1952 ms 7208 KiB
test_10_0050.txt AC 1952 ms 7240 KiB
test_10_0070.txt AC 1952 ms 7264 KiB
test_10_0090.txt AC 1952 ms 7152 KiB
test_10_0110.txt AC 1952 ms 7292 KiB
test_10_0130.txt AC 1952 ms 7260 KiB
test_10_0150.txt AC 1952 ms 7236 KiB
test_10_0170.txt AC 1952 ms 7304 KiB
test_10_0190.txt AC 1952 ms 7312 KiB
test_11_0011.txt AC 1952 ms 8248 KiB
test_11_0031.txt AC 1952 ms 8252 KiB
test_11_0051.txt AC 1953 ms 8252 KiB
test_11_0071.txt AC 1952 ms 8228 KiB
test_11_0091.txt AC 1953 ms 8356 KiB
test_11_0111.txt AC 1952 ms 8348 KiB
test_11_0131.txt AC 1953 ms 8220 KiB
test_11_0151.txt AC 1953 ms 8292 KiB
test_11_0171.txt AC 1953 ms 8348 KiB
test_11_0191.txt AC 1953 ms 8312 KiB
test_12_0012.txt AC 1953 ms 8044 KiB
test_12_0032.txt AC 1953 ms 7928 KiB
test_12_0052.txt AC 1953 ms 8100 KiB
test_12_0072.txt AC 1953 ms 8048 KiB
test_12_0092.txt AC 1953 ms 8088 KiB
test_12_0112.txt AC 1952 ms 8108 KiB
test_12_0132.txt AC 1953 ms 7984 KiB
test_12_0152.txt AC 1953 ms 7928 KiB
test_12_0172.txt AC 1953 ms 7988 KiB
test_12_0192.txt AC 1952 ms 7988 KiB
test_13_0013.txt AC 1953 ms 8088 KiB
test_13_0033.txt AC 1953 ms 8084 KiB
test_13_0053.txt AC 1953 ms 8144 KiB
test_13_0073.txt AC 1953 ms 8192 KiB
test_13_0093.txt AC 1952 ms 8188 KiB
test_13_0113.txt AC 1952 ms 8148 KiB
test_13_0133.txt AC 1953 ms 8056 KiB
test_13_0153.txt AC 1953 ms 8224 KiB
test_13_0173.txt AC 1952 ms 8144 KiB
test_13_0193.txt AC 1952 ms 8056 KiB
test_14_0014.txt AC 1953 ms 10844 KiB
test_14_0034.txt AC 1953 ms 10848 KiB
test_14_0054.txt AC 1953 ms 10764 KiB
test_14_0074.txt AC 1953 ms 10900 KiB
test_14_0094.txt AC 1953 ms 10788 KiB
test_14_0114.txt AC 1953 ms 10784 KiB
test_14_0134.txt AC 1953 ms 10880 KiB
test_14_0154.txt AC 1953 ms 10724 KiB
test_14_0174.txt AC 1953 ms 10848 KiB
test_14_0194.txt AC 1953 ms 10880 KiB
test_15_0015.txt AC 159 ms 14896 KiB
test_15_0035.txt AC 159 ms 14856 KiB
test_15_0055.txt AC 158 ms 14904 KiB
test_15_0075.txt AC 158 ms 14916 KiB
test_15_0095.txt AC 158 ms 14900 KiB
test_15_0115.txt AC 159 ms 15048 KiB
test_15_0135.txt AC 160 ms 14948 KiB
test_15_0155.txt AC 159 ms 14948 KiB
test_15_0175.txt AC 157 ms 14948 KiB
test_15_0195.txt AC 158 ms 14948 KiB
test_16_0016.txt AC 1954 ms 15920 KiB
test_16_0036.txt AC 1953 ms 15816 KiB
test_16_0056.txt AC 1954 ms 15912 KiB
test_16_0076.txt AC 1954 ms 15936 KiB
test_16_0096.txt AC 1954 ms 15916 KiB
test_16_0116.txt AC 1954 ms 15888 KiB
test_16_0136.txt AC 1953 ms 15764 KiB
test_16_0156.txt AC 1953 ms 15920 KiB
test_16_0176.txt AC 1954 ms 15756 KiB
test_16_0196.txt AC 1954 ms 15860 KiB
test_17_0017.txt AC 1955 ms 29856 KiB
test_17_0037.txt AC 1955 ms 30008 KiB
test_17_0057.txt AC 1955 ms 29980 KiB
test_17_0077.txt AC 1955 ms 30024 KiB
test_17_0097.txt AC 1955 ms 29972 KiB
test_17_0117.txt AC 1955 ms 29924 KiB
test_17_0137.txt AC 1955 ms 30004 KiB
test_17_0157.txt AC 1955 ms 29860 KiB
test_17_0177.txt AC 1955 ms 29856 KiB
test_17_0197.txt AC 1955 ms 29852 KiB
test_18_0018.txt AC 1955 ms 30972 KiB
test_18_0038.txt AC 1955 ms 30828 KiB
test_18_0058.txt AC 1955 ms 30912 KiB
test_18_0078.txt AC 1955 ms 30968 KiB
test_18_0098.txt AC 1955 ms 30972 KiB
test_18_0118.txt AC 1955 ms 30968 KiB
test_18_0138.txt AC 1955 ms 30852 KiB
test_18_0158.txt AC 1955 ms 30916 KiB
test_18_0178.txt AC 1955 ms 30952 KiB
test_18_0198.txt AC 1955 ms 30888 KiB
test_19_0019.txt AC 1975 ms 405128 KiB
test_19_0039.txt AC 1975 ms 405120 KiB
test_19_0059.txt AC 1975 ms 405060 KiB
test_19_0079.txt AC 1975 ms 405100 KiB
test_19_0099.txt AC 1974 ms 405180 KiB
test_19_0119.txt AC 1975 ms 405152 KiB
test_19_0139.txt AC 1974 ms 405156 KiB
test_19_0159.txt AC 1974 ms 405096 KiB
test_19_0179.txt AC 1975 ms 405012 KiB
test_19_0199.txt AC 1974 ms 405160 KiB
test_1_0001.txt AC 1692 ms 20924 KiB
test_1_0021.txt AC 1698 ms 18844 KiB
test_1_0041.txt AC 1684 ms 19304 KiB
test_1_0061.txt AC 1684 ms 20804 KiB
test_1_0081.txt AC 1701 ms 24192 KiB
test_1_0101.txt AC 1692 ms 20616 KiB
test_1_0121.txt AC 1617 ms 18740 KiB
test_1_0141.txt AC 1646 ms 17056 KiB
test_1_0161.txt AC 1681 ms 20184 KiB
test_1_0181.txt AC 1667 ms 18736 KiB
test_2_0002.txt AC 1952 ms 5048 KiB
test_2_0022.txt AC 1952 ms 5008 KiB
test_2_0042.txt AC 1952 ms 4944 KiB
test_2_0062.txt AC 1952 ms 4876 KiB
test_2_0082.txt AC 1952 ms 5048 KiB
test_2_0102.txt AC 1952 ms 4992 KiB
test_2_0122.txt AC 1952 ms 5012 KiB
test_2_0142.txt AC 1952 ms 5004 KiB
test_2_0162.txt AC 1952 ms 4940 KiB
test_2_0182.txt AC 1952 ms 4932 KiB
test_3_0003.txt AC 1952 ms 5132 KiB
test_3_0023.txt AC 1952 ms 4960 KiB
test_3_0043.txt AC 1952 ms 5096 KiB
test_3_0063.txt AC 1952 ms 5024 KiB
test_3_0083.txt AC 1952 ms 5024 KiB
test_3_0103.txt AC 1952 ms 5108 KiB
test_3_0123.txt AC 1952 ms 5036 KiB
test_3_0143.txt AC 1952 ms 4964 KiB
test_3_0163.txt AC 1952 ms 5096 KiB
test_3_0183.txt AC 1952 ms 5112 KiB
test_4_0004.txt AC 1952 ms 6036 KiB
test_4_0024.txt AC 1952 ms 6068 KiB
test_4_0044.txt AC 1952 ms 5956 KiB
test_4_0064.txt AC 1952 ms 5976 KiB
test_4_0084.txt AC 1952 ms 5972 KiB
test_4_0104.txt AC 1952 ms 6064 KiB
test_4_0124.txt AC 1952 ms 6048 KiB
test_4_0144.txt AC 1952 ms 5976 KiB
test_4_0164.txt AC 1952 ms 5908 KiB
test_4_0184.txt AC 1952 ms 6028 KiB
test_5_0005.txt AC 1952 ms 6680 KiB
test_5_0025.txt AC 1952 ms 6664 KiB
test_5_0045.txt AC 1952 ms 6604 KiB
test_5_0065.txt AC 1952 ms 6604 KiB
test_5_0085.txt AC 1952 ms 6660 KiB
test_5_0105.txt AC 1952 ms 6604 KiB
test_5_0125.txt AC 1952 ms 6552 KiB
test_5_0145.txt AC 1952 ms 6704 KiB
test_5_0165.txt AC 1952 ms 6680 KiB
test_5_0185.txt AC 1952 ms 6532 KiB
test_6_0006.txt AC 1952 ms 6796 KiB
test_6_0026.txt AC 1952 ms 6764 KiB
test_6_0046.txt AC 1952 ms 6696 KiB
test_6_0066.txt AC 1952 ms 6804 KiB
test_6_0086.txt AC 1952 ms 6804 KiB
test_6_0106.txt AC 1952 ms 6840 KiB
test_6_0126.txt AC 1952 ms 6760 KiB
test_6_0146.txt AC 1952 ms 6788 KiB
test_6_0166.txt AC 1952 ms 6692 KiB
test_6_0186.txt AC 1952 ms 6700 KiB
test_7_0007.txt AC 1952 ms 6456 KiB
test_7_0027.txt AC 1952 ms 6504 KiB
test_7_0047.txt AC 1952 ms 6408 KiB
test_7_0067.txt AC 1952 ms 6444 KiB
test_7_0087.txt AC 1952 ms 6492 KiB
test_7_0107.txt AC 1952 ms 6448 KiB
test_7_0127.txt AC 1952 ms 6556 KiB
test_7_0147.txt AC 1952 ms 6436 KiB
test_7_0167.txt AC 1952 ms 6420 KiB
test_7_0187.txt AC 1952 ms 6460 KiB
test_8_0008.txt AC 1952 ms 6624 KiB
test_8_0028.txt AC 1952 ms 6616 KiB
test_8_0048.txt AC 1952 ms 6728 KiB
test_8_0068.txt AC 1952 ms 6768 KiB
test_8_0088.txt AC 1952 ms 6624 KiB
test_8_0108.txt AC 1952 ms 6736 KiB
test_8_0128.txt AC 1952 ms 6716 KiB
test_8_0148.txt AC 1952 ms 6728 KiB
test_8_0168.txt AC 1952 ms 6704 KiB
test_8_0188.txt AC 1952 ms 6732 KiB
test_9_0009.txt AC 1952 ms 6676 KiB
test_9_0029.txt AC 1952 ms 6592 KiB
test_9_0049.txt AC 1952 ms 6656 KiB
test_9_0069.txt AC 1952 ms 6648 KiB
test_9_0089.txt AC 1952 ms 6624 KiB
test_9_0109.txt AC 1952 ms 6708 KiB
test_9_0129.txt AC 1952 ms 6644 KiB
test_9_0149.txt AC 1952 ms 6692 KiB
test_9_0169.txt AC 1952 ms 6572 KiB
test_9_0189.txt AC 1952 ms 6704 KiB