Submission #61302590
Source Code Expand
#line 1 "main.cpp"
#pragma GCC target("avx2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#include <cstdio>
#include <cassert>
#include <cmath>
#include <cstring>
#include <string>
#include <functional>
#include <stack>
#include <utility>
#include <queue>
#include <algorithm>
#include <execinfo.h>
#include <iostream>
#include <set>
#include <numeric>
#include <map>
using namespace std;
using ll = long long int;
#ifdef DEBUG
#define STDERR(...) fprintf(stderr, __VA_ARGS__);
#define ASSERT_OVERLOAD(e1,e2,NAME,...) NAME
#define ASSERT_1(x) assert_with_backtrace((x))
#define ASSERT_2(x, y) assert_with_backtrace((x), (y))
#define ASSERT(...) ASSERT_OVERLOAD(__VA_ARGS__, ASSERT_2, ASSERT_1)(__VA_ARGS__)
#define DEBUG_PRINT(...) fprintf(stderr, __VA_ARGS__), printf(__VA_ARGS__)
#else
#define STDERR(...)
#define ASSERT(...)
#define DEBUG_PRINT(...)
#endif
// assert で落ちたときにバックトレースする (`-g -rdynamic` が必要)
// デバッグモードでのみ有効
void assert_with_backtrace(bool condition, std::string error_msg="") {
if(!condition) {
void* callstack[256];
int i, frames = backtrace(callstack, 256);
char** strs = backtrace_symbols(callstack, frames);
for (i = 0; i < frames; ++i) {
fprintf(stderr, "%s\n", strs[i]);
}
free(strs);
fprintf(stderr, "%s\n", error_msg.c_str());
ASSERT(false);
}
}
template <typename Tp>
bool chmin(Tp& a, const Tp& b) {
if(a > b) {
a = b;
return true;
} else {
return false;
}
}
template <typename Tp>
bool chmax(Tp& a, const Tp& b) {
if(a < b) {
a = b;
return true;
} else {
return false;
}
}
#line 1 "/home/tsutaj/Documents/compro/cpp_library/marathon/timer.cpp"
#include <chrono>
class Timer {
chrono::high_resolution_clock::time_point start, end;
double limit; // 秒数を指定
public:
Timer() {
start = chrono::high_resolution_clock::now();
}
Timer(double l) {
start = chrono::high_resolution_clock::now();
limit = l;
}
double getTime() {
end = chrono::high_resolution_clock::now();
return chrono::duration<double>(end - start).count();
}
bool isTimeOver() {
if (getTime() > limit) {
return true;
}
return false;
}
double getLimit() { return limit; }
void setLimit(double l) {
limit = l;
}
void setStart() { start = chrono::high_resolution_clock::now(); }
};
#line 1 "/home/tsutaj/Documents/compro/cpp_library/marathon/rand.cpp"
// [lb, ub] の閉区間内の値をランダムに返す構造体
#include <random>
#include <limits>
struct Rand {
public:
Rand() = default;
Rand(std::mt19937::result_type seed) : eng(seed) {}
uint32_t NextUInt(uint32_t lb, uint32_t ub) {
return std::uniform_int_distribution<uint32_t>{lb, ub}(eng);
}
uint32_t NextUInt() {
return std::uniform_int_distribution<uint32_t>{0, std::numeric_limits<uint32_t>::max()}(eng);
}
int32_t NextInt(int32_t lb, int32_t ub) {
return std::uniform_int_distribution<int32_t>{lb, ub}(eng);
}
int32_t NextInt() {
return std::uniform_int_distribution<int32_t>{0, std::numeric_limits<int32_t>::max()}(eng);
}
uint64_t NextULong(uint64_t lb, uint64_t ub) {
return std::uniform_int_distribution<uint64_t>{lb, ub}(eng);
}
uint64_t NextULong() {
return std::uniform_int_distribution<uint64_t>{0, std::numeric_limits<uint64_t>::max()}(eng);
}
int64_t NextLong(int64_t lb, int64_t ub) {
return std::uniform_int_distribution<int64_t>{lb, ub}(eng);
}
int64_t NextLong() {
return std::uniform_int_distribution<int64_t>{0, std::numeric_limits<int64_t>::max()}(eng);
}
double NextDouble(double lb = 0.0, double ub = 1.0) {
return std::uniform_real_distribution<double>{lb, ub}(eng);
}
private:
std::mt19937 eng{std::random_device{}()};
};
#line 1 "/home/tsutaj/Documents/compro/cpp_library/marathon/chokudai_search.cpp"
/**
* @brief chokudai サーチ
* @docs docs/marathon/chokudai_search.md
*/
#line 1 "/home/tsutaj/Documents/compro/cpp_library/marathon/interval_heap.cpp"
template <typename Tp>
class IntervalHeap {
public:
template <class Iterator>
IntervalHeap(Iterator first, Iterator last) : data_(first, last) {
make_heap();
}
IntervalHeap() = default;
size_t size() const { return data_.size(); }
void clear() { data_.clear(); }
void emplace(const Tp& val) {
data_.push_back(val);
up(size() - 1);
}
void push(const Tp& val) { emplace(val); }
const Tp& top_min() const { return data_[size() >= 2]; }
const Tp& top_max() const { return data_[0]; }
void pop_min() {
if(size() <= 2) {
data_.pop_back();
} else {
swap(data_[1], data_.back());
data_.pop_back();
const size_t k = down(1);
up(k);
}
}
void pop_max() {
if(size() <= 1) {
data_.pop_back();
} else {
swap(data_[0], data_.back());
data_.pop_back();
const size_t k = down(0);
up(k);
}
}
private:
vector<Tp> data_;
inline size_t to_k_max(size_t k) { return k & ~1; }
inline size_t to_k_min(size_t k) { return k | 1; }
inline size_t get_parent(size_t k, bool is_max) { return (((k >> 1) - 1) & ~1) | (is_max ? 0 : 1); }
size_t down(size_t k) {
const size_t s = size();
if(k & 1) {
// min heap
while(true) {
const size_t cl = (k << 1) + 1;
const size_t cr = (k << 1) + 3;
if(cl >= s) break;
const size_t c = (cr >= s || data_[cl] < data_[cr]) ? cl : cr;
if(data_[c] < data_[k]) {
swap(data_[k], data_[c]);
k = c;
} else {
break;
}
}
} else {
// max heap
while(true) {
const size_t cl = (k << 1) + 2;
const size_t cr = (k << 1) + 4;
if(cl >= s) break;
const size_t c = (cr >= s || data_[cr] < data_[cl]) ? cl : cr;
if(data_[k] < data_[c]) {
swap(data_[k], data_[c]);
k = c;
} else {
break;
}
}
}
return k;
}
void up(size_t k, size_t root = 1) {
const size_t k_max = to_k_max(k);
const size_t k_min = to_k_min(k);
if(k_min < size() && data_[k_max] < data_[k_min]) {
swap(data_[k_max], data_[k_min]);
k ^= 1;
}
size_t p;
// max heap
while(root < k && data_[p = get_parent(k, true)] < data_[k]) {
swap(data_[k], data_[p]);
k = p;
}
// min heap
while(root < k && data_[k] < data_[p = get_parent(k, false)]) {
swap(data_[k], data_[p]);
k = p;
}
}
void make_heap() {
for(size_t i = size(); i--;) {
if((i & 1) && data_[i - 1] < data_[i]) {
swap(data_[i - 1], data_[i]);
}
size_t k = down(i);
up(k, i);
}
}
};
#line 7 "/home/tsutaj/Documents/compro/cpp_library/marathon/chokudai_search.cpp"
template <class State, class Timer>
class ChokudaiSearch {
public:
ChokudaiSearch() : num_iter_(-1) {}
void init(int max_turns, double search_time, int time_check_iter) {
states_.resize(max_turns + 1);
search_time_ = search_time;
num_iter_ = 0;
time_check_iter_ = time_check_iter;
max_num_states_.resize(max_turns, 1 << 30);
}
void set_max_num_states(int max_num_state) {
fill(max_num_states_.begin(), max_num_states_.end(), max_num_state);
}
void set_max_num_states(const vector<int> &max_num_states) {
assert(max_num_states.size() == max_num_states_.size());
max_num_states_ = max_num_states;
}
void register_state(int turns, const State &state) {
states_[turns].emplace(state);
while(states_[turns].size() > max_num_states_[turns]) {
states_[turns].pop_max();
}
}
void search(Timer &timer, const auto &add_next_states) {
assert(num_iter_ >= 0);
const double start_time = timer.getTime();
for(num_iter_ = 0;; num_iter_++) {
for(int turns = 0; turns + 1 < (int)states_.size(); turns++) {
if(timer.getTime() - start_time > search_time_) {
goto TIME_OVER;
}
if(states_[turns].size() == 0) continue;
State state = states_[turns].top_min();
states_[turns].pop_min();
add_next_states(turns, state);
}
}
TIME_OVER:;
fprintf(stderr, "chokudai search: num_iter = %d\n", num_iter_);
}
const State &get_best_state() const { return states_.back().top_min(); }
private:
double search_time_;
int num_iter_;
int time_check_iter_;
vector<IntervalHeap<State>> states_;
vector<int> max_num_states_;
};
#line 74 "main.cpp"
// #include "xrand1.h"
Rand rnd(35023503980LL);
Timer timer;
constexpr int MAX_SET_SIZE = 3;
struct Parameters {
double time_limit = 1.95;
} params;
constexpr int N = 9;
constexpr int M = 20;
constexpr int S = 3;
constexpr int K = 81;
constexpr int MOD = 998244353;
int stamps[M][S][S];
int mod_add(int v1, int v2) {
int ret = v1 + v2;
while(ret >= MOD) ret -= MOD;
while(ret < 0) ret += MOD;
return ret;
}
int mod_sub(int v1, int v2) {
int ret = v1 - v2;
while(ret < 0) ret += MOD;
return ret;
}
struct Board {
public:
void input() {
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) {
scanf("%d", &board[i][j]);
}
}
}
int* operator[](int r) { return board[r]; }
const int* operator[](int r) const { return board[r]; }
int cell_score(int r, int c) const { return board[r][c]; }
ll calc_score_naive() const {
ll score = 0;
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) {
score += cell_score(i, j);
}
}
return score;
}
private:
int board[N][N];
};
struct Operation {
int r, c, t;
Operation() = default;
Operation(int r, int c, int t) : r(r), c(c), t(t) {}
};
struct State {
public:
Board board;
int ops;
ll score;
Operation operations[K];
State() = default;
State(const Board& board) : board(board), ops(0), score(board.calc_score_naive()) {}
inline bool can_add() { return ops < K; }
inline bool can_del() { return ops > 0; }
void dump_answer() const {
printf("%d\n", ops);
for(int i=0; i<ops; i++) {
auto [r, c, t] = operations[i];
printf("%d %d %d\n", t, r, c);
}
}
void add(int r, int c, int t) {
for(int dr=0; dr<S; dr++) {
for(int dc=0; dc<S; dc++) {
ASSERT(r + dr < N);
ASSERT(c + dc < N);
score -= board[r + dr][c + dc];
board[r + dr][c + dc] = mod_add(board[r + dr][c + dc], stamps[t][dr][dc]);
score += board[r + dr][c + dc];
}
}
operations[ops++] = Operation(r, c, t);
}
void del(int k) {
const auto& [r, c, t] = operations[k];
for(int dr=0; dr<S; dr++) {
for(int dc=0; dc<S; dc++) {
ASSERT(r + dr < N);
ASSERT(c + dc < N);
score -= board[r + dr][c + dc];
board[r + dr][c + dc] = mod_sub(board[r + dr][c + dc], stamps[t][dr][dc]);
score += board[r + dr][c + dc];
}
}
swap(operations[k], operations[ops - 1]);
ops--;
}
};
void input(Board& initial_board) {
int n, m, k; scanf("%d%d%d", &n, &m, &k);
initial_board.input();
for(int i=0; i<M; i++) {
for(int r=0; r<S; r++) {
for(int c=0; c<S; c++) {
scanf("%d", &stamps[i][r][c]);
}
}
}
}
bool need_update(ll cur_score, ll nxt_score, double temp = 1e-9) {
ll score_diff = nxt_score - cur_score;
// return score_diff > 0;
return rnd.NextDouble() < exp(score_diff / temp);
}
void solve1(const State& initial_state) {
State cur_state = initial_state;
int num_iter = 0;
DEBUG_PRINT("initial score: %lld\n", cur_state.score);
// 5.0x10^8 * 9 = 4.5*10^9
double start_temp = 1.0e9;
double end_temp = 0.0;
double start_time = timer.getTime();
double time_ratio = (timer.getTime() - start_time) / (params.time_limit - start_time);
double cur_temp = start_temp + (end_temp - start_temp) * time_ratio;
State best_state = cur_state;
ll best_score = cur_state.score;
for(; ; num_iter++) {
if (num_iter % 10000 == 0) {
if (timer.isTimeOver()) {
break;
}
time_ratio = (timer.getTime() - start_time) / (params.time_limit - start_time);
cur_temp = start_temp + (end_temp - start_temp) * time_ratio;
}
int kind = rnd.NextInt(0, 2);
if (kind == 0) {
if (!cur_state.can_add()) continue;
int r = rnd.NextInt(0, N - S);
int c = rnd.NextInt(0, N - S);
int t = rnd.NextInt(0, M - 1);
ll cur_score = cur_state.score;
cur_state.add(r, c, t);
ll nxt_score = cur_state.score;
if (need_update(cur_score, nxt_score, cur_temp)) {
// do nothing
} else {
int k = cur_state.ops - 1;
cur_state.del(k);
}
} else if (kind == 1) {
if (!cur_state.can_del()) continue;
int k = rnd.NextInt(0, cur_state.ops - 1);
auto [r, c, t] = cur_state.operations[k];
ll cur_score = cur_state.score;
cur_state.del(k);
ll nxt_score = cur_state.score;
ll score_diff = nxt_score - cur_score;
if (need_update(cur_score, nxt_score, cur_temp)) {
// do nothing
} else {
cur_state.add(r, c, t);
}
} else if (kind == 2) {
if (!cur_state.can_del()) continue;
int k = rnd.NextInt(0, cur_state.ops - 1);
auto [r1, c1, t1] = cur_state.operations[k];
int r2 = rnd.NextInt(0, N - S);
int c2 = rnd.NextInt(0, N - S);
int t2 = rnd.NextInt(0, M - 1);
ll cur_score = cur_state.score;
cur_state.del(k);
cur_state.add(r2, c2, t2);
ll nxt_score = cur_state.score;
if (need_update(cur_score, nxt_score, cur_temp)) {
// do nothing
} else {
cur_state.del(cur_state.ops - 1);
cur_state.add(r1, c1, t1);
}
} else if (kind == 3) {
if (!cur_state.can_add()) continue;
int num_add = rnd.NextInt(1, min(5, K - cur_state.ops));
int r = rnd.NextInt(0, N - S);
int c = rnd.NextInt(0, N - S);
ll cur_score = cur_state.score;
for(int i=0; i<num_add; i++) {
int t = rnd.NextInt(0, M - 1);
cur_state.add(r, c, t);
}
ll nxt_score = cur_state.score;
if (need_update(cur_score, nxt_score, cur_temp)) {
// do nothing
} else {
for(int i=0; i<num_add; i++) {
cur_state.del(cur_state.ops - 1);
}
}
}
if (cur_state.score > best_score) {
best_score = cur_state.score;
best_state = cur_state;
}
}
DEBUG_PRINT("num_iter = %d, final score: %lld\n", num_iter, best_state.score);
best_state.dump_answer();
}
const int vec2int(const vector<int>& vec) {
int ret = 0;
for(int i=0; i<MAX_SET_SIZE; i++) {
int k = i < vec.size() ? vec[i] : M;
ret = ret * (M + 1) + k;
}
return ret;
}
const vector<int> int2vec(int val) {
vector<int> vec;
for(int i=0; i<MAX_SET_SIZE; i++) {
int k = val % (M + 1);
if (k < M) vec.emplace_back(k);
val /= (M + 1);
}
return vec;
}
vector< pair<int, vector<int>> > stamps_candidate;
vector<int> idx2int;
void precalc() {
auto dfs = [&](auto&& self, vector<int>& vec, int k, int sum) -> void {
if (vec.size() > MAX_SET_SIZE) return;
if (k == M) {
if (!vec.empty()) {
stamps_candidate.emplace_back(sum, vec);
}
return;
}
self(self, vec, k+1, sum);
vec.push_back(k);
self(self, vec, k, (sum + stamps[k][0][0]) % MOD);
vec.pop_back();
};
vector<int> empty_vec;
dfs(dfs, empty_vec, 0, 0);
sort(stamps_candidate.begin(), stamps_candidate.end(), [&](const auto& p1, const auto& p2) {
if (p1.first != p2.first) return p1.first < p2.first;
return p1.second.size() < p2.second.size();
});
vector< pair<int, vector<int>> > new_stamps_candidate;
for(const auto& [sum, vec] : stamps_candidate) {
bool add = false;
add |= new_stamps_candidate.empty();
add |= !add && new_stamps_candidate.back().first != sum;
add |= !add && new_stamps_candidate.back().first == sum && new_stamps_candidate.back().second.size() == vec.size();
if (add) {
new_stamps_candidate.emplace_back(sum, vec);
idx2int.emplace_back(vec2int(vec));
}
}
// fprintf(stderr, "new_stamps_candidate size = %zu\n", new_stamps_candidate.size());
// for(auto& [sum, vec] : new_stamps_candidate) {
// fprintf(stderr, "sum = %d, vec = {", sum);
// for(int i=0; i<vec.size(); i++) {
// fprintf(stderr, "%d%c", vec[i], i+1 == vec.size() ? '}' : ',');
// }
// fprintf(stderr, "\n");
// }
swap(stamps_candidate, new_stamps_candidate);
}
struct CSState {
State s;
ll score;
ll decided_sum;
CSState() = default;
bool operator<(const CSState &other) const {
return score < other.score;
}
CSState(const State &s, ll score, ll decided_sum) : s(s), score(score), decided_sum(decided_sum) {}
};
void solve2(const State& initial_state) {
auto extract = [&](const State& state, int r, int c) {
int n_dr = (r == 6 ? 3 : 1);
int n_dc = (c == 6 ? 3 : 1);
ll res = 0;
for(int dr=0; dr<n_dr; dr++) {
for(int dc=0; dc<n_dc; dc++) {
res += state.board[r + dr][c + dc];
}
}
return res;
};
ChokudaiSearch<CSState, Timer> chokudai_search;
chokudai_search.init(50, timer.getLimit() - timer.getTime(), 100);
chokudai_search.register_state(0, CSState{initial_state, 0LL, 0LL});
chokudai_search.set_max_num_states(3000);
vector<int> limit_k_vec, num_neighbors_vec;
for(int stage=0, limit_k=3; stage<49; stage++) {
int r = stage / 7, c = stage % 7;
bool is_edge = (r == 6 || c == 6);
int add_k = 1;
if (r == 6 && c == 6) add_k = 6;
else if (r == 6 || c == 6) add_k = 3;
limit_k += add_k;
limit_k_vec.emplace_back(limit_k);
const int num_neighbors = add_k == 1 ? 100 : add_k == 3 ? 150 : 200;
num_neighbors_vec.emplace_back(num_neighbors);
}
auto add_next_states = [&](int actual_turns, CSState& state) {
const int stage = actual_turns - (actual_turns == 49);
const int r = stage / 7;
const int c = stage % 7;
const bool is_edge = (r == 6 || c == 6);
int target = MOD - 1 - state.s.board[r][c];
int idx = upper_bound(stamps_candidate.begin(), stamps_candidate.end(), make_pair(target, vector<int>{M})) - stamps_candidate.begin();
idx--;
{
ll n_decided_sum = state.decided_sum + extract(state.s, r, c);
ll n_score = stage < 48 ? n_decided_sum : state.s.score;
n_score -= 1LL * state.s.ops * 30000000;
chokudai_search.register_state(actual_turns + 1, CSState(state.s, -n_score, n_decided_sum)); // 何もしない
}
for(int iter=0, ok=true; iter<num_neighbors_vec[stage] && ok;) {
if (idx < 0) idx = stamps_candidate.size() - 1;
while (idx >= stamps_candidate.size()) idx--;
const auto& [sum, vec] = stamps_candidate[idx];
if (state.s.ops + vec.size() <= limit_k_vec[stage]) {
iter++;
for(int i=0; i<(int)vec.size(); i++) {
state.s.add(r, c, vec[i]);
}
if (is_edge || state.s.board[r][c] >= 700000000) {
ll n_decided_sum = state.decided_sum + extract(state.s, r, c);
ll n_score = stage < 48 ? n_decided_sum : state.s.score;
n_score -= 1LL * state.s.ops * 30000000;
chokudai_search.register_state(actual_turns + 1, CSState(state.s, -n_score, n_decided_sum));
} else {
ok = false;
}
for(int i=0; i<(int)vec.size(); i++) {
state.s.del(state.s.ops - 1);
}
}
idx--;
}
};
chokudai_search.search(timer, add_next_states);
const State& best_state = chokudai_search.get_best_state().s;
fprintf(stderr, "best_state score = %lld\n", best_state.score);
best_state.dump_answer();
}
int main() {
timer.setStart();
timer.setLimit(params.time_limit);
Board initial_board;
input(initial_board);
precalc();
State initial_state(initial_board);
// solve1(initial_state);
solve2(initial_state);
fprintf(stderr, "end time: %lf\n", timer.getTime());
return 0;
}
Submission Info
Submission Time
2025-01-01 23:29:52+0900
Task
A - Mod Stamp
User
tsutaj
Language
C++ 23 (gcc 12.2)
Score
11779375759508
Code Size
22261 Byte
Status
AC
Exec Time
1960 ms
Memory
397248 KiB
Compile Error
main.cpp: In function ‘void solve1(const State&)’:
main.cpp:243:16: warning: unused variable ‘score_diff’ [-Wunused-variable]
main.cpp: At global scope:
main.cpp:297:1: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
main.cpp: In function ‘const int vec2int(const std::vector<int>&)’:
main.cpp:300:19: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
main.cpp: In function ‘void solve2(const State&)’:
main.cpp:393:14: warning: unused variable ‘is_edge’ [-Wunused-variable]
main.cpp: In lambda function:
main.cpp:420:24: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<std::pair<int, std::vector<int> > >::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
main.cpp:422:42: warning: comparison of integer expressions of different signedness: ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} and ‘__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type’ {aka ‘int’} [-Wsign-compare]
/home/tsutaj/Documents/compro/cpp_library/marathon/chokudai_search.cpp: In instantiation of ‘void ChokudaiSearch<State, Timer>::register_state(int, const State&) [with State = CSState; Timer = Timer]’:
main.cpp:387:35: required from here
/home/tsutaj/Documents/compro/cpp_library/marathon/chokudai_search.cpp:28:37: warning: comparison of integer expressions of different signedness: ‘size_t’ {aka ‘long unsigned int’} and ‘__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type’ {aka ‘int’} [-Wsign-compare]
main.cpp: In function ‘void input(Board&)’:
main.cpp:182:23: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
main.cpp:187:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
main.cpp: In member function ‘void Board::input()’:
main.cpp:107:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
Judge Result
Set Name
test_ALL
Score / Max Score
11779375759508 / 12089754470400
Status
Set Name
Test Cases
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
Case Name
Status
Exec Time
Memory
test_0000.txt
AC
1957 ms
224320 KiB
test_0001.txt
AC
1957 ms
215548 KiB
test_0002.txt
AC
1958 ms
222140 KiB
test_0003.txt
AC
1957 ms
219172 KiB
test_0004.txt
AC
1957 ms
221464 KiB
test_0005.txt
AC
1957 ms
228516 KiB
test_0006.txt
AC
1957 ms
215832 KiB
test_0007.txt
AC
1957 ms
223924 KiB
test_0008.txt
AC
1957 ms
226236 KiB
test_0009.txt
AC
1957 ms
229588 KiB
test_0010.txt
AC
1957 ms
227804 KiB
test_0011.txt
AC
1957 ms
231400 KiB
test_0012.txt
AC
1960 ms
397248 KiB
test_0013.txt
AC
1958 ms
222464 KiB
test_0014.txt
AC
1957 ms
231064 KiB
test_0015.txt
AC
1957 ms
229144 KiB
test_0016.txt
AC
1957 ms
225196 KiB
test_0017.txt
AC
1957 ms
224016 KiB
test_0018.txt
AC
1957 ms
225024 KiB
test_0019.txt
AC
1957 ms
217732 KiB
test_0020.txt
AC
1957 ms
221336 KiB
test_0021.txt
AC
1957 ms
230532 KiB
test_0022.txt
AC
1957 ms
220068 KiB
test_0023.txt
AC
1960 ms
394900 KiB
test_0024.txt
AC
1957 ms
222172 KiB
test_0025.txt
AC
1957 ms
218460 KiB
test_0026.txt
AC
1957 ms
218364 KiB
test_0027.txt
AC
1957 ms
216432 KiB
test_0028.txt
AC
1957 ms
216828 KiB
test_0029.txt
AC
1957 ms
222540 KiB
test_0030.txt
AC
1957 ms
220956 KiB
test_0031.txt
AC
1957 ms
215948 KiB
test_0032.txt
AC
1957 ms
225032 KiB
test_0033.txt
AC
1957 ms
218396 KiB
test_0034.txt
AC
1959 ms
395820 KiB
test_0035.txt
AC
1957 ms
222632 KiB
test_0036.txt
AC
1957 ms
221616 KiB
test_0037.txt
AC
1957 ms
220208 KiB
test_0038.txt
AC
1957 ms
223100 KiB
test_0039.txt
AC
1957 ms
218232 KiB
test_0040.txt
AC
1957 ms
222164 KiB
test_0041.txt
AC
1957 ms
221532 KiB
test_0042.txt
AC
1957 ms
227348 KiB
test_0043.txt
AC
1957 ms
219920 KiB
test_0044.txt
AC
1957 ms
221108 KiB
test_0045.txt
AC
1957 ms
216912 KiB
test_0046.txt
AC
1957 ms
234712 KiB
test_0047.txt
AC
1957 ms
224744 KiB
test_0048.txt
AC
1959 ms
389108 KiB
test_0049.txt
AC
1957 ms
222300 KiB
test_0050.txt
AC
1957 ms
219048 KiB
test_0051.txt
AC
1957 ms
223052 KiB
test_0052.txt
AC
1957 ms
228776 KiB
test_0053.txt
AC
1957 ms
223720 KiB
test_0054.txt
AC
1957 ms
220536 KiB
test_0055.txt
AC
1957 ms
223128 KiB
test_0056.txt
AC
1957 ms
227748 KiB
test_0057.txt
AC
1957 ms
216884 KiB
test_0058.txt
AC
1957 ms
219184 KiB
test_0059.txt
AC
1957 ms
231636 KiB
test_0060.txt
AC
1957 ms
220668 KiB
test_0061.txt
AC
1957 ms
220428 KiB
test_0062.txt
AC
1957 ms
226728 KiB
test_0063.txt
AC
1957 ms
227744 KiB
test_0064.txt
AC
1957 ms
227544 KiB
test_0065.txt
AC
1957 ms
223320 KiB
test_0066.txt
AC
1959 ms
394052 KiB
test_0067.txt
AC
1957 ms
224564 KiB
test_0068.txt
AC
1957 ms
223308 KiB
test_0069.txt
AC
1957 ms
226120 KiB
test_0070.txt
AC
1957 ms
226236 KiB
test_0071.txt
AC
1957 ms
225748 KiB
test_0072.txt
AC
1957 ms
226084 KiB
test_0073.txt
AC
1957 ms
228404 KiB
test_0074.txt
AC
1957 ms
204932 KiB
test_0075.txt
AC
1957 ms
230804 KiB
test_0076.txt
AC
1957 ms
223404 KiB
test_0077.txt
AC
1957 ms
219044 KiB
test_0078.txt
AC
1957 ms
224160 KiB
test_0079.txt
AC
1957 ms
215008 KiB
test_0080.txt
AC
1957 ms
222052 KiB
test_0081.txt
AC
1957 ms
216824 KiB
test_0082.txt
AC
1957 ms
230312 KiB
test_0083.txt
AC
1957 ms
214976 KiB
test_0084.txt
AC
1957 ms
227700 KiB
test_0085.txt
AC
1957 ms
213960 KiB
test_0086.txt
AC
1957 ms
227564 KiB
test_0087.txt
AC
1957 ms
220848 KiB
test_0088.txt
AC
1960 ms
396016 KiB
test_0089.txt
AC
1958 ms
227176 KiB
test_0090.txt
AC
1957 ms
217916 KiB
test_0091.txt
AC
1960 ms
393744 KiB
test_0092.txt
AC
1958 ms
226944 KiB
test_0093.txt
AC
1957 ms
228788 KiB
test_0094.txt
AC
1957 ms
220824 KiB
test_0095.txt
AC
1957 ms
215968 KiB
test_0096.txt
AC
1957 ms
214308 KiB
test_0097.txt
AC
1957 ms
227500 KiB
test_0098.txt
AC
1958 ms
224804 KiB
test_0099.txt
AC
1957 ms
220188 KiB
test_0100.txt
AC
1957 ms
220628 KiB
test_0101.txt
AC
1957 ms
218844 KiB
test_0102.txt
AC
1958 ms
231204 KiB
test_0103.txt
AC
1957 ms
219468 KiB
test_0104.txt
AC
1957 ms
219276 KiB
test_0105.txt
AC
1957 ms
227496 KiB
test_0106.txt
AC
1957 ms
221432 KiB
test_0107.txt
AC
1957 ms
214384 KiB
test_0108.txt
AC
1957 ms
221140 KiB
test_0109.txt
AC
1957 ms
224256 KiB
test_0110.txt
AC
1957 ms
226088 KiB
test_0111.txt
AC
1957 ms
224924 KiB
test_0112.txt
AC
1957 ms
220156 KiB
test_0113.txt
AC
1957 ms
216920 KiB
test_0114.txt
AC
1957 ms
225828 KiB
test_0115.txt
AC
1957 ms
222436 KiB
test_0116.txt
AC
1957 ms
224480 KiB
test_0117.txt
AC
1960 ms
395360 KiB
test_0118.txt
AC
1957 ms
218936 KiB
test_0119.txt
AC
1958 ms
228456 KiB
test_0120.txt
AC
1957 ms
229764 KiB
test_0121.txt
AC
1957 ms
227512 KiB
test_0122.txt
AC
1957 ms
219080 KiB
test_0123.txt
AC
1957 ms
225228 KiB
test_0124.txt
AC
1957 ms
225036 KiB
test_0125.txt
AC
1957 ms
224536 KiB
test_0126.txt
AC
1957 ms
226912 KiB
test_0127.txt
AC
1957 ms
210568 KiB
test_0128.txt
AC
1957 ms
220288 KiB
test_0129.txt
AC
1960 ms
393724 KiB
test_0130.txt
AC
1957 ms
222848 KiB
test_0131.txt
AC
1957 ms
230176 KiB
test_0132.txt
AC
1957 ms
231744 KiB
test_0133.txt
AC
1957 ms
220984 KiB
test_0134.txt
AC
1957 ms
225064 KiB
test_0135.txt
AC
1957 ms
226232 KiB
test_0136.txt
AC
1957 ms
216344 KiB
test_0137.txt
AC
1957 ms
232508 KiB
test_0138.txt
AC
1957 ms
223688 KiB
test_0139.txt
AC
1957 ms
227952 KiB
test_0140.txt
AC
1957 ms
218480 KiB
test_0141.txt
AC
1957 ms
224984 KiB
test_0142.txt
AC
1957 ms
220048 KiB
test_0143.txt
AC
1957 ms
223732 KiB
test_0144.txt
AC
1957 ms
229448 KiB
test_0145.txt
AC
1957 ms
214188 KiB
test_0146.txt
AC
1957 ms
219608 KiB
test_0147.txt
AC
1957 ms
218204 KiB
test_0148.txt
AC
1957 ms
222488 KiB
test_0149.txt
AC
1960 ms
397144 KiB