Submission #38713543
Source Code Expand
#include <bits/stdc++.h>
constexpr int DEBUG = 0;
using namespace std;
using int64 = long long;
constexpr int INF = 1E9;
template <typename T>
ostream& operator<<(ostream& s, const vector<T>& v) {
s << "[";
for (int i = 0; i < int(v.size()); i++) {
if (i > 0) {
s << ", ";
}
s << v[i];
}
s << "]";
return s;
}
template<typename T>
vector<vector<T>> Make2D(int d1, int d2, T default_value) {
return vector<vector<T>>(d1, vector<T>(d2, default_value));
}
template<typename T>
vector<vector<vector<T>>>
Make3D(int d1, int d2, int d3, T default_value) {
return vector<vector<vector<T>>>(
d1, vector<vector<T>>(d2, vector<T>(d3, default_value)));
}
class Random {
public:
Random()
: random_engine_(
std::chrono::system_clock::now().time_since_epoch().count()) {}
Random(int seed) : random_engine_(seed) {}
int RandomInt(int a, int b, bool inclusive = false) {
if (inclusive) b++;
return uniform_int_distribution<int>(a, b - 1)(random_engine_);
}
double RandomDouble(double a, double b) {
return uniform_real_distribution<double>(a, b)(random_engine_);
}
template <class T>
void Shuffle(vector<T>& v) {
shuffle(v.begin(), v.end(), random_engine_);
}
private:
default_random_engine random_engine_;
};
class TimeMeasurement {
public:
TimeMeasurement() : start_(chrono::steady_clock::now()) {}
int64 CurrentMs() const {
auto now = chrono::steady_clock::now();
return chrono::duration_cast<chrono::milliseconds>(now - start_).count();
}
int64 CurrentUs() const {
auto now = chrono::steady_clock::now();
return chrono::duration_cast<chrono::microseconds>(now - start_).count();
}
void Reset() {
start_ = chrono::steady_clock::now();
}
private:
chrono::time_point<chrono::steady_clock> start_;
};
struct UndirectedEdge {
int id, v0, v1;
int w;
UndirectedEdge(int id, int v0, int v1, int w)
: id(id), v0(v0), v1(v1), w(w) {}
};
const UndirectedEdge kInvalidUndirectedEdge = UndirectedEdge(-1, -1, -1, 0);
struct Edge {
int id, s, t;
int w;
Edge(int id, int s, int t, int w) : id(id), s(s), t(t), w(w) {}
};
const Edge kInvalidEdge = Edge(-1, -1, -1, 0);
struct CompactEdge {
int id;
int t;
CompactEdge(int id, int t) : id(id), t(t) {}
CompactEdge() : id(-1), t(-1) {}
};
const CompactEdge kInvalidCompactEdge = CompactEdge(-1, -1);
struct Int2D {
int x, y;
Int2D(int x, int y) : x(x), y(y) {}
};
void ShortestPath(
const vector<vector<Edge>>& graph,
const vector<int>& is_edge_active, int s,
vector<int>& distance_vector,
vector<CompactEdge>& parent_edge_vector) {
int n = graph.size();
for (int v = 0; v < n; v++) {
distance_vector[v] = INF;
parent_edge_vector[v] = kInvalidCompactEdge;
}
vector<int> finalized(n);
struct S {
int v;
int w;
};
auto c = [](const S& s1, const S& s2) { return s1.w > s2.w; };
priority_queue<S, vector<S>, decltype(c)> pq(c);
distance_vector[s] = 0;
pq.push(S({s, 0}));
while (!pq.empty()) {
S s = pq.top();
pq.pop();
if (finalized[s.v]) {
continue;
}
finalized[s.v] = 1;
for (const auto& e : graph[s.v]) {
if (!is_edge_active[e.id]) continue;
if (!finalized[e.t] && s.w + e.w < distance_vector[e.t]) {
distance_vector[e.t] = s.w + e.w;
parent_edge_vector[e.t] = CompactEdge(e.id, e.s);
pq.push(S({e.t, distance_vector[e.t]}));
}
}
}
}
double ShortestPathAverageDeltaWithEdgeAddition(
const vector<vector<Edge>>& graph, const vector<int>& is_edge_active,
const UndirectedEdge& added_edge, int s, vector<int>& distance_vector,
vector<CompactEdge>& parent_edge_vector,
vector<tuple<int, int, CompactEdge>>& history_tuples) {
if (distance_vector[added_edge.v0] + added_edge.w >=
distance_vector[added_edge.v1] &&
distance_vector[added_edge.v1] + added_edge.w >=
distance_vector[added_edge.v0]) {
return 0.0;
}
double distance_delta = 0;
auto update = [&](int v, double d, int edge_id, int p) -> void {
history_tuples.push_back({v, distance_vector[v], parent_edge_vector[v]});
distance_delta += d - distance_vector[v];
distance_vector[v] = d;
parent_edge_vector[v] = CompactEdge(edge_id, p);
};
int r = -1;
int d_r = 0;
if (distance_vector[added_edge.v0] + added_edge.w <
distance_vector[added_edge.v1]) {
r = added_edge.v1;
d_r = distance_vector[added_edge.v0] + added_edge.w;
update(r, d_r, added_edge.id, added_edge.v0);
} else if (distance_vector[added_edge.v1] + added_edge.w <
distance_vector[added_edge.v0]) {
r = added_edge.v0;
d_r = distance_vector[added_edge.v1] + added_edge.w;
update(r, d_r, added_edge.id, added_edge.v1);
} else {
exit(1);
}
constexpr int MAX_VERTEX_COUNT = 1000;
static vector<int> visited(MAX_VERTEX_COUNT);
static vector<int> visited_vertex_list;
struct S {
int v;
int w;
};
static auto c = [](const S& s1, const S& s2) { return s1.w > s2.w; };
static priority_queue<S, vector<S>, decltype(c)> pq(c);
pq.push(S({r, d_r}));
while (!pq.empty()) {
// loop_count++;
S s = pq.top();
pq.pop();
if (visited[s.v]) {
continue;
}
visited[s.v] = 1;
visited_vertex_list.push_back(s.v);
for (const Edge e : graph[s.v]) {
if (!is_edge_active[e.id]) continue;
if (!visited[e.t] && s.w + e.w < distance_vector[e.t]) {
update(e.t, s.w + e.w, e.id, e.s);
pq.push(S({e.t, distance_vector[e.t]}));
}
}
}
// Reset visited and visited_vertex_list for reuse.
for (int v : visited_vertex_list) {
visited[v] = 0;
// finalized_count++;
}
visited_vertex_list.clear();
return distance_delta / (graph.size() - 1);
}
double ShortestPathAverageDeltaWithEdgeDeletion(
const vector<vector<Edge>>& graph, const vector<int>& is_edge_active,
const UndirectedEdge& deleted_edge, int s, vector<int>& distance_vector,
vector<CompactEdge>& parent_edge_vector,
vector<tuple<int, int, CompactEdge>>& history_tuples) {
int r = -1;
if (parent_edge_vector[deleted_edge.v0].t == deleted_edge.v1) {
r = deleted_edge.v0;
} else if (parent_edge_vector[deleted_edge.v1].t == deleted_edge.v0) {
r = deleted_edge.v1;
} else {
return 0.0;
}
static vector<int> invalidated_vertex_list;
static deque<int> q;
invalidated_vertex_list.push_back(r);
q.push_back(r);
while (!q.empty()) {
int v = q.front();
q.pop_front();
for (const Edge& e : graph[v]) {
if (parent_edge_vector[e.t].t == v) {
invalidated_vertex_list.push_back(e.t);
q.push_back(e.t);
}
}
};
constexpr int MAX_VERTEX_COUNT = 1000;
static vector<int> invalidated(MAX_VERTEX_COUNT);
for (int v : invalidated_vertex_list) {
invalidated[v] = 1;
// invalidated_count++;
}
static vector<int> finalized(MAX_VERTEX_COUNT);
static vector<int> finalized_vertex_list;
struct S {
int v;
int w;
};
static auto c = [](const S& s1, const S& s2) { return s1.w > s2.w; };
static priority_queue<S, vector<S>, decltype(c)> pq(c);
double distance_delta = 0;
auto update = [&](int v, int d, int edge_id, int p) -> void {
history_tuples.push_back({v, distance_vector[v], parent_edge_vector[v]});
distance_delta += d - distance_vector[v];
distance_vector[v] = d;
parent_edge_vector[v] = CompactEdge(edge_id, p);
};
for (int v : invalidated_vertex_list) {
// CompactEdge parent_edge = parent_edge_vector[v];
int min_d = INF;
Edge min_edge = kInvalidEdge;
for (const Edge& e : graph[v]) {
if (!is_edge_active[e.id]) continue;
if (!invalidated[e.t]) {
if (distance_vector[e.t] + e.w < min_d) {
min_d = distance_vector[e.t] + e.w;
min_edge = e;
}
}
}
if (min_edge.id >= 0) {
invalidated[v] = 0;
update(v, min_d, min_edge.id, min_edge.t);
pq.push(S({v, min_d}));
}
}
while (!pq.empty()) {
S s = pq.top();
pq.pop();
if (finalized[s.v]) {
continue;
}
finalized[s.v] = 1;
finalized_vertex_list.push_back(s.v);
for (const Edge e : graph[s.v]) {
if (!is_edge_active[e.id]) continue;
if (invalidated[e.t]) {
invalidated[e.t] = 0;
update(e.t, s.w + e.w, e.id, e.s);
pq.push(S({e.t, distance_vector[e.t]}));
} else if (!finalized[e.t] && s.w + e.w < distance_vector[e.t]) {
update(e.t, s.w + e.w, e.id, e.s);
pq.push(S({e.t, distance_vector[e.t]}));
}
}
}
for (int v : invalidated_vertex_list) {
if (invalidated[v]) {
update(v, INF, -1, -1);
}
}
// Reset invalidated and invalidated_vertex_list for reuse.
for (int v : invalidated_vertex_list) {
invalidated[v] = 0;
}
invalidated_vertex_list.clear();
// Reset finalized and finalized_vertex_list for reuse.
for (int v : finalized_vertex_list) {
finalized[v] = 0;
}
finalized_vertex_list.clear();
return distance_delta / (graph.size() - 1);
}
double ExponentialInterpolation(
double x0, double y0, double x1, double y1, double x) {
double r = (x - x0) / (x1 - x0);
return exp(log(y0) + r * (log(y1) - log(y0)));
}
class Main {
public:
Main(int vertex_count, int edge_count, int day_count,
int max_assignment_per_day, const vector<UndirectedEdge>& edges,
const vector<Int2D>& points)
: vertex_count_(vertex_count),
edge_count_(edge_count),
day_count_(day_count),
max_assignment_per_day_(max_assignment_per_day),
edges_(edges),
points_(points),
graph_(GraphFromEdges(vertex_count, edges)),
base_distance_matrix_(
BaseDistanceMatrix(vertex_count, edge_count, graph_)) {}
void Run() { RunInternal(); }
private:
Random random_ = Random(0);
TimeMeasurement time_;
const int vertex_count_;
const int edge_count_;
const int day_count_;
const int max_assignment_per_day_;
const vector<UndirectedEdge> edges_;
const vector<Int2D> points_;
const vector<vector<Edge>> graph_;
const vector<vector<int>> base_distance_matrix_;
static vector<vector<Edge>> GraphFromEdges(
int vertex_count, const vector<UndirectedEdge>& edges) {
vector<vector<Edge>> graph(vertex_count);
for (const auto& edge : edges) {
graph[edge.v0].push_back(Edge(edge.id, edge.v0, edge.v1, edge.w));
graph[edge.v1].push_back(Edge(edge.id, edge.v1, edge.v0, edge.w));
}
return graph;
}
static vector<vector<int>> BaseDistanceMatrix(
int vertex_count,
int edge_count,
const vector<vector<Edge>>& graph) {
vector<vector<int>> base_distance_matrix =
Make2D(vertex_count, vertex_count, INF);
vector<vector<CompactEdge>> parent_edge_vectors =
Make2D(vertex_count, vertex_count, kInvalidCompactEdge);
for (int s = 0; s < vertex_count; s++) {
ShortestPath(
graph, vector<int>(edge_count, 1), s, base_distance_matrix[s],
parent_edge_vectors[s]);
}
return base_distance_matrix;
}
vector<int> InitializeEdgeAssignment() {
vector<int> edge_assignment(edge_count_);
for (int edge_id = 0; edge_id < edge_count_; edge_id++) {
edge_assignment[edge_id] = edge_id % day_count_;
}
return edge_assignment;
}
vector<vector<int>> InitializeDayToIsEdgeActive(
const vector<int>& edge_assignment) {
vector<vector<int>> day_to_is_edge_active =
Make2D(day_count_, edge_count_, 1);
for (int edge_id = 0; edge_id < edge_count_; edge_id++) {
day_to_is_edge_active[edge_assignment[edge_id]][edge_id] = 0;
}
return day_to_is_edge_active;
}
void OutputEdgeAssignment(const vector<int>& edge_assignment) {
for (int edge_id = 0; edge_id < edge_count_; edge_id++) {
cout << edge_assignment[edge_id] + 1 << " ";
}
cout << endl;
}
tuple<vector<int>, vector<double>> MakeSampleVertexes(int grid_size) {
auto find_closest_vertex = [&](double x, double y) -> int {
double min_d2 = DBL_MAX;
int min_d2_v = -1;
for (int v = 0; v < vertex_count_; v++) {
double d2 = (points_[v].x - x) * (points_[v].x - x) +
(points_[v].y - y) * (points_[v].y - y);
if (d2 < min_d2) {
min_d2 = d2;
min_d2_v = v;
}
}
return min_d2_v;
};
vector<int> sample_vs;
for (int y_index = 0; y_index < grid_size; y_index++) {
for (int x_index = 0; x_index < grid_size; x_index++) {
double x = 1000.0 / (2 * grid_size) * (2 * x_index + 1);
double y = 1000.0 / (2 * grid_size) * (2 * y_index + 1);
if ((x - 500.0) * (x - 500.0) + (y - 500.0) * (y - 500.0) >
500.0 * 500.0) {
continue;
}
sample_vs.push_back(find_closest_vertex(x, y));
}
}
vector<double> weights(sample_vs.size());
for (int v = 0; v < vertex_count_; v++) {
double d2_min = DBL_MAX;
int d2_min_sample_id = -1;
for (int sample_id = 0; sample_id < int(sample_vs.size()); sample_id++) {
double dx = points_[v].x - points_[sample_vs[sample_id]].x;
double dy = points_[v].y - points_[sample_vs[sample_id]].y;
double d2 = dx * dx + dy * dy;
if (d2 < d2_min) {
d2_min = d2;
d2_min_sample_id = sample_id;
}
}
weights[d2_min_sample_id] += 1.0;
}
for (int i = 0; i < int(sample_vs.size()); i++) {
weights[i] /= vertex_count_;
}
return {sample_vs, weights};
}
void RunMainPhase(
vector<int>& edge_assignment,
vector<vector<int>>& day_to_is_edge_active) {
vector<int> day_to_assignment_count(day_count_);
for (int edge_id = 0; edge_id < edge_count_; edge_id++) {
day_to_assignment_count[edge_assignment[edge_id]]++;
}
const auto [sample_vs, sample_weights] = MakeSampleVertexes(5);
int sample_count = sample_vs.size();
cerr << "sample_count: " << sample_count << endl;
vector<vector<vector<int>>> day_sample_to_distance_vector =
Make3D(day_count_, sample_count, vertex_count_, INF);
vector<vector<vector<CompactEdge>>> day_sample_to_parent_edge_vector =
Make3D(day_count_, sample_count, vertex_count_, kInvalidCompactEdge);
for (int day = 0; day < day_count_; day++) {
for (int sample_id = 0; sample_id < sample_count; sample_id++) {
int s = sample_vs[sample_id];
ShortestPath(
graph_, day_to_is_edge_active[day], s,
day_sample_to_distance_vector[day][sample_id],
day_sample_to_parent_edge_vector[day][sample_id]);
}
}
vector<vector<tuple<int, int, CompactEdge>>> sample_to_history_vector_0(
sample_count);
vector<vector<tuple<int, int, CompactEdge>>> sample_to_history_vector_1(
sample_count);
double sa_start_time = time_.CurrentMs();
double sa_end_time = 5700.0;
int try_count = 0;
int update_count = 0;
double delta_sum = 0.0;
while (true) {
double current_time = time_.CurrentMs();
if (current_time >= sa_end_time) {
break;
}
constexpr double MAX_TEMPERATURE = 10.0;
constexpr double MIN_TEMPERATURE = 0.1;
double temperature = ExponentialInterpolation(
sa_start_time, MAX_TEMPERATURE, sa_end_time, MIN_TEMPERATURE,
current_time);
int edge_id = random_.RandomInt(0, edge_count_);
int day_0 = edge_assignment[edge_id];
int day_1 = random_.RandomInt(0, day_count_);
if (day_0 == day_1) continue;
if (day_to_assignment_count[day_1] >= max_assignment_per_day_) {
continue;
}
try_count++;
day_to_is_edge_active[day_0][edge_id] = 1;
day_to_is_edge_active[day_1][edge_id] = 0;
double delta = 0;
for (int sample_id = 0; sample_id < sample_count; sample_id++) {
int s = sample_vs[sample_id];
double weight = sample_weights[sample_id];
delta += ShortestPathAverageDeltaWithEdgeAddition(
graph_, day_to_is_edge_active[day_0], edges_[edge_id], s,
day_sample_to_distance_vector[day_0][sample_id],
day_sample_to_parent_edge_vector[day_0][sample_id],
sample_to_history_vector_0[sample_id]) *
weight * (1.0 / day_count_);
delta += ShortestPathAverageDeltaWithEdgeDeletion(
graph_, day_to_is_edge_active[day_1], edges_[edge_id], s,
day_sample_to_distance_vector[day_1][sample_id],
day_sample_to_parent_edge_vector[day_1][sample_id],
sample_to_history_vector_1[sample_id]) *
weight * (1.0 / day_count_);
}
if (exp(-delta / temperature) >= random_.RandomDouble(0, 1)) {
delta_sum += delta;
update_count++;
edge_assignment[edge_id] = day_1;
day_to_assignment_count[day_0]--;
day_to_assignment_count[day_1]++;
for (int sample_id = 0; sample_id < sample_count; sample_id++) {
sample_to_history_vector_0[sample_id].clear();
sample_to_history_vector_1[sample_id].clear();
}
} else {
day_to_is_edge_active[day_0][edge_id] = 0;
day_to_is_edge_active[day_1][edge_id] = 1;
for (int sample_id = 0; sample_id < sample_count; sample_id++) {
auto& history_vector_0 = sample_to_history_vector_0[sample_id];
for (int history_index = history_vector_0.size() - 1;
history_index >= 0; history_index--) {
const auto [v, d, e] = history_vector_0[history_index];
day_sample_to_distance_vector[day_0][sample_id][v] = d;
day_sample_to_parent_edge_vector[day_0][sample_id][v] = e;
}
history_vector_0.clear();
auto& history_vector_1 = sample_to_history_vector_1[sample_id];
for (int history_index = history_vector_1.size() - 1;
history_index >= 0; history_index--) {
const auto [v, d, e] = history_vector_1[history_index];
day_sample_to_distance_vector[day_1][sample_id][v] = d;
day_sample_to_parent_edge_vector[day_1][sample_id][v] = e;
}
history_vector_1.clear();
}
}
if (try_count % 10000 == 0) {
cerr << "try_count: " << try_count << endl;
cerr << "update_count: " << update_count << endl;
cerr << "delta_sum: " << delta_sum << endl;
}
}
cerr << "try_count: " << try_count << endl;
cerr << "update_count: " << update_count << endl;
cerr << "delta_sum: " << delta_sum << endl;
}
void RunInternal() {
vector<int> edge_assignment = InitializeEdgeAssignment();
vector<vector<int>> day_to_is_edge_active =
InitializeDayToIsEdgeActive(edge_assignment);
RunMainPhase(edge_assignment, day_to_is_edge_active);
OutputEdgeAssignment(edge_assignment);
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int vertex_count;
cin >> vertex_count;
int edge_count;
cin >> edge_count;
int day_count;
cin >> day_count;
int max_assignment_per_day;
cin >> max_assignment_per_day;
vector<UndirectedEdge> edges;
for (int edge_id = 0; edge_id < edge_count; edge_id++) {
int v0, v1;
int w;
cin >> v0 >> v1 >> w;
v0--;
v1--;
edges.push_back(UndirectedEdge(edge_id, v0, v1, w));
}
vector<Int2D> points;
for (int vertex_id = 0; vertex_id < vertex_count; vertex_id++) {
int x, y;
cin >> x >> y;
points.push_back(Int2D(x, y));
}
Main main(vertex_count, edge_count, day_count, max_assignment_per_day, edges, points);
main.Run();
}
Submission Info
| Submission Time |
|
| Task |
A - Road Repair |
| User |
ymatsux |
| Language |
C++ (GCC 9.2.1) |
| Score |
449093516 |
| Code Size |
20432 Byte |
| Status |
AC |
| Exec Time |
5711 ms |
| Memory |
15892 KiB |
Compile Error
./Main.cpp: In function ‘double ShortestPathAverageDeltaWithEdgeAddition(const std::vector<std::vector<Edge> >&, const std::vector<int>&, const UndirectedEdge&, int, std::vector<int>&, std::vector<CompactEdge>&, std::vector<std::tuple<int, int, CompactEdge> >&)’:
./Main.cpp:149:43: warning: unused parameter ‘s’ [-Wunused-parameter]
149 | const UndirectedEdge& added_edge, int s, vector<int>& distance_vector,
| ~~~~^
./Main.cpp: In function ‘double ShortestPathAverageDeltaWithEdgeDeletion(const std::vector<std::vector<Edge> >&, const std::vector<int>&, const UndirectedEdge&, int, std::vector<int>&, std::vector<CompactEdge>&, std::vector<std::tuple<int, int, CompactEdge> >&)’:
./Main.cpp:226:45: warning: unused parameter ‘s’ [-Wunused-parameter]
226 | const UndirectedEdge& deleted_edge, int s, vector<int>& distance_vector,
| ~~~~^
Judge Result
| Set Name |
test_ALL |
| Score / Max Score |
449093516 / 50000000000 |
| 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 |
| Case Name |
Status |
Exec Time |
Memory |
| test_0000.txt |
AC |
5708 ms |
12060 KiB |
| test_0001.txt |
AC |
5708 ms |
9740 KiB |
| test_0002.txt |
AC |
5708 ms |
10440 KiB |
| test_0003.txt |
AC |
5705 ms |
6944 KiB |
| test_0004.txt |
AC |
5709 ms |
13632 KiB |
| test_0005.txt |
AC |
5707 ms |
14268 KiB |
| test_0006.txt |
AC |
5708 ms |
14956 KiB |
| test_0007.txt |
AC |
5709 ms |
13732 KiB |
| test_0008.txt |
AC |
5708 ms |
13732 KiB |
| test_0009.txt |
AC |
5704 ms |
13100 KiB |
| test_0010.txt |
AC |
5709 ms |
11004 KiB |
| test_0011.txt |
AC |
5709 ms |
10268 KiB |
| test_0012.txt |
AC |
5704 ms |
12788 KiB |
| test_0013.txt |
AC |
5705 ms |
7756 KiB |
| test_0014.txt |
AC |
5707 ms |
9672 KiB |
| test_0015.txt |
AC |
5707 ms |
12108 KiB |
| test_0016.txt |
AC |
5705 ms |
12300 KiB |
| test_0017.txt |
AC |
5708 ms |
15608 KiB |
| test_0018.txt |
AC |
5705 ms |
10048 KiB |
| test_0019.txt |
AC |
5705 ms |
10968 KiB |
| test_0020.txt |
AC |
5708 ms |
14752 KiB |
| test_0021.txt |
AC |
5706 ms |
11396 KiB |
| test_0022.txt |
AC |
5705 ms |
15304 KiB |
| test_0023.txt |
AC |
5706 ms |
12316 KiB |
| test_0024.txt |
AC |
5709 ms |
12252 KiB |
| test_0025.txt |
AC |
5706 ms |
9796 KiB |
| test_0026.txt |
AC |
5711 ms |
12536 KiB |
| test_0027.txt |
AC |
5705 ms |
14172 KiB |
| test_0028.txt |
AC |
5708 ms |
11584 KiB |
| test_0029.txt |
AC |
5707 ms |
8952 KiB |
| test_0030.txt |
AC |
5708 ms |
9936 KiB |
| test_0031.txt |
AC |
5705 ms |
9520 KiB |
| test_0032.txt |
AC |
5707 ms |
8636 KiB |
| test_0033.txt |
AC |
5707 ms |
12588 KiB |
| test_0034.txt |
AC |
5709 ms |
12740 KiB |
| test_0035.txt |
AC |
5708 ms |
9908 KiB |
| test_0036.txt |
AC |
5707 ms |
8924 KiB |
| test_0037.txt |
AC |
5708 ms |
11156 KiB |
| test_0038.txt |
AC |
5707 ms |
10212 KiB |
| test_0039.txt |
AC |
5709 ms |
13388 KiB |
| test_0040.txt |
AC |
5705 ms |
12664 KiB |
| test_0041.txt |
AC |
5709 ms |
12344 KiB |
| test_0042.txt |
AC |
5708 ms |
8980 KiB |
| test_0043.txt |
AC |
5708 ms |
14296 KiB |
| test_0044.txt |
AC |
5707 ms |
14416 KiB |
| test_0045.txt |
AC |
5708 ms |
15892 KiB |
| test_0046.txt |
AC |
5709 ms |
14968 KiB |
| test_0047.txt |
AC |
5707 ms |
8328 KiB |
| test_0048.txt |
AC |
5704 ms |
10712 KiB |
| test_0049.txt |
AC |
5707 ms |
9292 KiB |