Submission #71292134
Source Code Expand
// greedy_length_pref_merge.cpp
// Python 実装を忠実に C++ に翻訳したもの
#include <bits/stdc++.h>
using namespace std;
struct UF {
int n;
vector<int> p, rankv;
UF(int n=0): n(n), p(n), rankv(n,0) { for (int i=0;i<n;i++) p[i]=i; }
int find(int x){
while (p[x] != x) {
p[x] = p[p[x]];
x = p[x];
}
return x;
}
int unite(int a, int b){
int ra = find(a), rb = find(b);
if (ra == rb) return ra;
if (rankv[ra] < rankv[rb]) swap(ra, rb);
p[rb] = ra;
if (rankv[ra] == rankv[rb]) rankv[ra] ++;
return ra;
}
};
// utilities
inline double torus_dx(double a, double b, int L){
double d = fabs(a - b);
return (d <= L - d) ? d : (L - d);
}
inline double torus_dist2_xy(double ax, double ay, double bx, double by, int L){
double dx = torus_dx(ax, bx, L);
double dy = torus_dx(ay, by, L);
return dx*dx + dy*dy;
}
// subset-sum reconstruct indices (returns vector of indices into given sizes), or empty if no solution
vector<int> find_subset_sum_indices(const vector<int>& sizes, int target){
if (target < 0) return {};
int m = (int)sizes.size();
vector<int> dp(target+1, -1);
vector<int> prev(target+1, -1);
dp[0] = -2; // marker
for (int idx=0; idx<m; ++idx){
int sz = sizes[idx];
if (sz > target) continue;
for (int s=target; s>=sz; --s){
if (dp[s] == -1 && dp[s - sz] != -1){
dp[s] = idx;
prev[s] = s - sz;
if (s == target){
vector<int> res;
int cur = s;
while (cur != 0){
int i = dp[cur];
res.push_back(i);
cur = prev[cur];
}
return res;
}
}
}
}
return {};
}
// pack components into M groups of sum K each. comp_list: tuple(root, members, size)
using CompItem = tuple<int, vector<int>, int>;
vector<vector<int>> pack_components_into_M_groups(const vector<CompItem>& comp_list, int M, int K, int attempts=200){
int n = (int)comp_list.size();
vector<int> sizes(n);
for (int i=0;i<n;i++) sizes[i] = get<2>(comp_list[i]);
vector<int> order(n);
iota(order.begin(), order.end(), 0);
sort(order.begin(), order.end(), [&](int a, int b){ return sizes[a] > sizes[b]; });
// try deterministic greedy Best-Fit-Decreasing
vector<vector<int>> groups(M);
vector<int> gsum(M,0);
bool ok_greedy = true;
for (int idx : order){
int sz = sizes[idx];
int best_g = -1; int best_space = INT_MAX;
for (int g = 0; g < M; ++g){
int rem = K - (gsum[g] + sz);
if (rem >= 0 && rem < best_space){
best_space = rem;
best_g = g;
}
}
if (best_g == -1) { ok_greedy = false; break; }
groups[best_g].push_back(idx);
gsum[best_g] += sz;
}
if (ok_greedy){
bool allK = true;
for (int s: gsum) if (s != K) { allK = false; break; }
if (allK) return groups;
}
// fallback DP repeated
auto try_order = [&](const vector<int>& ord)->vector<vector<int>>{
unordered_set<int> remaining(ord.begin(), ord.end());
vector<vector<int>> gres;
for (int g=0; g<M; ++g){
vector<int> rem_list(remaining.begin(), remaining.end());
vector<int> rem_sizes;
rem_sizes.reserve(rem_list.size());
for (int idx : rem_list) rem_sizes.push_back(sizes[idx]);
vector<int> subset = find_subset_sum_indices(rem_sizes, K);
if (subset.empty()) return {};
vector<int> chosen;
chosen.reserve(subset.size());
for (int id : subset){
chosen.push_back(rem_list[id]);
}
for (int c : chosen) remaining.erase(c);
gres.push_back(chosen);
}
if (!remaining.empty()) return {};
return gres;
};
vector<int> ord = order;
vector<vector<int>> g = try_order(ord);
if (!g.empty()) return g;
// randomized attempts
std::mt19937 rng((unsigned)chrono::high_resolution_clock::now().time_since_epoch().count());
for (int a=0; a<attempts; ++a){
shuffle(ord.begin(), ord.end(), rng);
g = try_order(ord);
if (!g.empty()) return g;
}
return {};
}
// Prim MST (returns list of edges connecting indices)
vector<pair<int,int>> prim_mst_indices(const vector<int>& indices, const vector<pair<double,double>>& pos, int L){
int K = (int)indices.size();
vector<pair<int,int>> edges;
if (K <= 1) return edges;
vector<char> in_mst(K, 0);
vector<double> dist(K, 1e300);
vector<int> parent(K, -1);
dist[0] = 0.0;
for (int it=0; it<K; ++it){
int u = -1; double best = 1e300;
for (int i=0;i<K;i++){
if (!in_mst[i] && dist[i] < best){ best = dist[i]; u = i; }
}
if (u == -1) break;
in_mst[u] = 1;
if (parent[u] != -1){
edges.emplace_back(indices[u], indices[parent[u]]);
}
auto pu = pos[indices[u]];
for (int v=0; v<K; ++v){
if (in_mst[v]) continue;
auto pv = pos[indices[v]];
double d = torus_dist2_xy(pu.first, pu.second, pv.first, pv.second, L);
if (d < dist[v]){ dist[v] = d; parent[v] = u; }
}
}
return edges;
}
// read input
bool read_input(int &N, int &T, int &M, int &K, int &L, vector<pair<double,double>>& pts, vector<pair<double,double>>& vels){
ios::sync_with_stdio(false);
cin.tie(nullptr);
if (!(cin >> N >> T >> M >> K >> L)) return false;
pts.assign(N, {0.0,0.0});
vels.assign(N, {0.0,0.0});
for (int i=0;i<N;i++){
int x,y,vx,vy;
cin >> x >> y >> vx >> vy;
pts[i].first = (double)x; pts[i].second = (double)y;
vels[i].first = (double)vx; vels[i].second = (double)vy;
}
return true;
}
// main greedy implementation (faithful to Python)
vector<tuple<int,int,int>> greedy_length_pref_merge(int N, int T, int M, int K, int L,
vector<pair<double,double>>& pts, vector<pair<double,double>>& vels, double THRESH, int NEIGHBORS)
{
UF uf(N);
unordered_map<int, pair<double,double>> vel;
unordered_map<int, int> size;
vel.reserve(N*2);
size.reserve(N*2);
for (int i=0;i<N;i++){
vel[i] = vels[i];
size[i] = 1;
}
vector<tuple<int,int,int>> merges;
int merges_needed = N - M;
bool use_thr = !(std::isnan(THRESH));
double thr2 = use_thr ? THRESH*THRESH : -1.0;
auto current_components = [&](void)->unordered_map<int, vector<int>>{
unordered_map<int, vector<int>> comp;
comp.reserve(N/2+10);
for (int i=0;i<N;i++){
int r = uf.find(i);
comp[r].push_back(i);
}
return comp;
};
for (int t=0; t<T; ++t){
if ((int)merges.size() >= merges_needed) break;
auto comp = current_components();
vector<int> roots;
roots.reserve(comp.size());
for (auto &kv : comp) roots.push_back(kv.first);
// candidate list
struct Cand { double d2; int ra, rb, ai, bi; };
vector<Cand> candidates;
candidates.reserve(roots.size() * (size_t)min((int)roots.size(), NEIGHBORS));
unordered_set<long long> seen;
for (int ra : roots){
auto &A = comp[ra];
vector<Cand> dlist;
dlist.reserve(roots.size());
int sa = size.count(ra) ? size[ra] : (int)A.size();
for (int rb : roots){
if (rb == ra) continue;
int sb = size.count(rb) ? size[rb] : (int)comp[rb].size();
if (sa + sb > K) continue;
auto &B = comp[rb];
double min_d2 = 1e300;
int besta=-1, bestb=-1;
if (A.size() <= B.size()){
for (int a : A){
double ax = pts[a].first, ay = pts[a].second;
for (int b : B){
double bx = pts[b].first, by = pts[b].second;
double d2 = torus_dist2_xy(ax, ay, bx, by, L);
if (d2 < min_d2){ min_d2 = d2; besta = a; bestb = b; if (min_d2 <= 0.0) break; }
}
if (min_d2 <= 0.0) break;
}
} else {
for (int b : B){
double bx = pts[b].first, by = pts[b].second;
for (int a : A){
double ax = pts[a].first, ay = pts[a].second;
double d2 = torus_dist2_xy(ax, ay, bx, by, L);
if (d2 < min_d2){ min_d2 = d2; besta = a; bestb = b; if (min_d2 <= 0.0) break; }
}
if (min_d2 <= 0.0) break;
}
}
if (use_thr && min_d2 > thr2) continue;
dlist.push_back({min_d2, ra, rb, besta, bestb});
}
if (dlist.empty()) continue;
sort(dlist.begin(), dlist.end(), [](const Cand &a, const Cand &b){ return a.d2 < b.d2; });
int limit = min((int)dlist.size(), NEIGHBORS);
for (int i=0;i<limit;i++){
const Cand &it = dlist[i];
int a = it.ra, b = it.rb;
int x = min(a,b), y = max(a,b);
long long key = ((long long)x<<32) ^ (long long)y;
if (seen.find(key) != seen.end()) continue;
seen.insert(key);
candidates.push_back(it);
}
}
sort(candidates.begin(), candidates.end(), [](const Cand &a, const Cand &b){
if (a.d2 != b.d2) return a.d2 < b.d2;
if (a.ra != b.ra) return a.ra < b.ra;
return a.rb < b.rb;
});
for (auto &c : candidates){
if ((int)merges.size() >= merges_needed) break;
int ra = c.ra, rb = c.rb;
int ia = c.ai, ib = c.bi;
int r_a = uf.find(ra), r_b = uf.find(rb);
if (r_a == r_b) continue;
int sa = size.count(r_a) ? size[r_a] : (int)comp[r_a].size();
int sb = size.count(r_b) ? size[r_b] : (int)comp[r_b].size();
if (sa + sb > K) continue;
int long_root, short_root, long_point, short_point;
int s_long, s_short;
if (sa >= sb){ long_root = r_a; short_root = r_b; long_point = ia; short_point = ib; s_long = sa; s_short = sb; }
else { long_root = r_b; short_root = r_a; long_point = ib; short_point = ia; s_long = sb; s_short = sa; }
// short-side alternative check
bool has_better_alt = false;
if (use_thr){
auto comp_now = current_components();
double sx = pts[short_point].first, sy = pts[short_point].second;
for (auto &kv : comp_now){
int r_other = kv.first;
if (r_other == long_root || r_other == short_root) continue;
int size_other = size.count(r_other) ? size[r_other] : (int)kv.second.size();
if (size_other >= s_long) continue;
for (int m : kv.second){
double mx = pts[m].first, my = pts[m].second;
if (torus_dist2_xy(sx, sy, mx, my, L) <= thr2){ has_better_alt = true; break; }
}
if (has_better_alt) break;
}
} else {
auto comp_now = current_components();
double sx = pts[short_point].first, sy = pts[short_point].second;
vector<pair<double,int>> nearest_comps;
nearest_comps.reserve(comp_now.size());
for (auto &kv : comp_now){
int r_other = kv.first;
if (r_other == long_root || r_other == short_root) continue;
int size_other = size.count(r_other) ? size[r_other] : (int)kv.second.size();
if (size_other >= s_long) continue;
double md = 1e300;
for (int m : kv.second){
double d2 = torus_dist2_xy(sx, sy, pts[m].first, pts[m].second, L);
if (d2 < md) md = d2;
}
nearest_comps.emplace_back(md, r_other);
}
if (!nearest_comps.empty()){
sort(nearest_comps.begin(), nearest_comps.end());
if (nearest_comps[0].first < c.d2 - 1e-9) has_better_alt = true;
}
}
if (has_better_alt) continue;
// packing check
auto comp_now = current_components();
vector<CompItem> comp_items;
comp_items.reserve(comp_now.size());
for (auto &kv : comp_now){
int root = kv.first;
if (root == r_a || root == r_b) continue;
int s = size.count(root) ? size[root] : (int)kv.second.size();
comp_items.emplace_back(root, kv.second, s);
}
vector<int> merged_members = comp[r_a];
auto &v2 = comp[r_b];
merged_members.insert(merged_members.end(), v2.begin(), v2.end());
comp_items.emplace_back(-1, merged_members, sa + sb);
bool bad=false;
for (auto &it : comp_items){
if (get<2>(it) > K){ bad = true; break; }
}
if (bad) continue;
auto pack = pack_components_into_M_groups(comp_items, M, K, 50);
if (pack.empty()) continue;
// accept merge
merges.emplace_back(t, long_point, short_point);
int ra_root = uf.find(long_point), rb_root = uf.find(short_point);
if (ra_root != rb_root){
int sa2 = size.count(ra_root) ? size[ra_root] : 1;
int sb2 = size.count(rb_root) ? size[rb_root] : 1;
auto vxa_vya = vel.count(ra_root) ? vel[ra_root] : vels[ra_root];
auto vxb_vyb = vel.count(rb_root) ? vel[rb_root] : vels[rb_root];
int newroot = uf.unite(ra_root, rb_root);
int newsize = sa2 + sb2;
double newvx = (sa2 * vxa_vya.first + sb2 * vxb_vyb.first) / (double)newsize;
double newvy = (sa2 * vxa_vya.second + sb2 * vxb_vyb.second) / (double)newsize;
vel[newroot] = {newvx, newvy};
size[newroot] = newsize;
if (newroot != ra_root){ vel.erase(ra_root); size.erase(ra_root); }
if (newroot != rb_root){ vel.erase(rb_root); size.erase(rb_root); }
}
}
// movement phase
for (int i=0;i<N;i++){
int r = uf.find(i);
auto it = vel.find(r);
double vx, vy;
if (it != vel.end()){ vx = it->second.first; vy = it->second.second; }
else { vx = vels[i].first; vy = vels[i].second; }
double nx = pts[i].first + vx;
double ny = pts[i].second + vy;
// normalize 0<= < L
nx = fmod(nx, (double)L); if (nx < 0) nx += L;
ny = fmod(ny, (double)L); if (ny < 0) ny += L;
pts[i].first = nx; pts[i].second = ny;
}
}
// final packing if needed at t=T-1
if ((int)merges.size() < merges_needed){
auto comp_now = current_components();
vector<CompItem> comp_items;
comp_items.reserve(comp_now.size());
for (auto &kv : comp_now){
int root = kv.first;
int s = size.count(root) ? size[root] : (int)kv.second.size();
comp_items.emplace_back(root, kv.second, s);
}
auto pack = pack_components_into_M_groups(comp_items, M, K, 500);
if (pack.empty()){
// fallback naive merging
vector<int> roots;
for (auto &kv: comp_now) roots.push_back(kv.first);
while ((int)merges.size() < merges_needed && (int)roots.size() >= 2){
int a = roots.front(); roots.erase(roots.begin());
int b = roots.front(); roots.erase(roots.begin());
auto &A = comp_now[a]; auto &B = comp_now[b];
double bestd = 1e300; pair<int,int> bestpair = {A[0], B[0]};
for (int x : A){
for (int y : B){
double d2 = torus_dist2_xy(pts[x].first, pts[x].second, pts[y].first, pts[y].second, L);
if (d2 < bestd){ bestd = d2; bestpair = {x,y}; }
}
}
merges.emplace_back(max(0, T-1), bestpair.first, bestpair.second);
uf.unite(bestpair.first, bestpair.second);
comp_now = current_components();
roots.clear();
for (auto &kv : comp_now) roots.push_back(kv.first);
}
} else {
// connect components within each packed group by nearest merges at t=T-1
// comp_items index -> comp_items[idx].first is root id
for (const auto &group : pack){
vector<int> subs;
subs.reserve(group.size());
for (int idx : group) subs.push_back(get<0>(comp_items[idx]));
comp_now = current_components();
while ((int)subs.size() > 1 && (int)merges.size() < merges_needed){
double bestd = 1e300; pair<int,int> bestpair = {-1,-1};
pair<int,int> best_roots = {-1,-1};
for (size_t i=0;i<subs.size();++i){
int ri = subs[i];
auto Ai_it = comp_now.find(ri);
if (Ai_it == comp_now.end()) continue;
auto &Ai = Ai_it->second;
for (size_t j=i+1;j<subs.size();++j){
int rj = subs[j];
auto Bj_it = comp_now.find(rj);
if (Bj_it == comp_now.end()) continue;
auto &Bj = Bj_it->second;
for (int a : Ai){
for (int b : Bj){
double d2 = torus_dist2_xy(pts[a].first, pts[a].second, pts[b].first, pts[b].second, L);
if (d2 < bestd){ bestd = d2; bestpair = {a,b}; best_roots = {ri,rj}; }
}
}
}
}
if (bestpair.first == -1) break;
merges.emplace_back(max(0, T-1), bestpair.first, bestpair.second);
uf.unite(bestpair.first, bestpair.second);
comp_now = current_components();
// filter subs to only roots still representatives
vector<int> new_subs;
for (int r : subs) if (uf.find(r) == r) new_subs.push_back(r);
subs.swap(new_subs);
}
}
}
}
return merges;
}
int main(int argc, char** argv){
double THRESH = 2000.0;
int NEIGHBORS = 5;
if (argc >= 2){
string s = argv[1];
if (s == "None" || s == "null" || s == "none" || s == "NULL") THRESH = numeric_limits<double>::quiet_NaN();
else {
try { THRESH = stod(s); } catch(...) { THRESH = numeric_limits<double>::quiet_NaN(); }
}
}
if (argc >= 3){
try { NEIGHBORS = stoi(argv[2]); } catch(...) { NEIGHBORS = 5; }
}
int N, T, M, K, L;
vector<pair<double,double>> pts, vels;
if (!read_input(N, T, M, K, L, pts, vels)) return 0;
vector<tuple<int,int,int>> merges = greedy_length_pref_merge(N,T,M,K,L,pts,vels,THRESH,NEIGHBORS);
int need = N - M;
int cnt = 0;
for (auto &m : merges){
if (cnt >= need) break;
int t,i,j;
tie(t,i,j) = m;
cout << t << " " << i << " " << j << "\n";
cnt++;
}
return 0;
}
Submission Info
| Submission Time |
|
| Task |
A - Molecules |
| User |
sukesann |
| Language |
C++23 (GCC 15.2.0) |
| Score |
729513654 |
| Code Size |
20827 Byte |
| Status |
AC |
| Exec Time |
589 ms |
| Memory |
3948 KiB |
Compile Error
./Main.cpp: In function 'std::vector<std::tuple<int, int, int> > greedy_length_pref_merge(int, int, int, int, int, std::vector<std::pair<double, double> >&, std::vector<std::pair<double, double> >&, double, int)':
./Main.cpp:293:25: warning: variable 's_short' set but not used [-Wunused-but-set-variable]
293 | int s_long, s_short;
| ^~~~~~~
Judge Result
| Set Name |
test_ALL |
| Score / Max Score |
729513654 / 1500000000000 |
| 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 |
542 ms |
3728 KiB |
| test_0001.txt |
AC |
428 ms |
3780 KiB |
| test_0002.txt |
AC |
489 ms |
3828 KiB |
| test_0003.txt |
AC |
498 ms |
3812 KiB |
| test_0004.txt |
AC |
483 ms |
3848 KiB |
| test_0005.txt |
AC |
476 ms |
3828 KiB |
| test_0006.txt |
AC |
480 ms |
3748 KiB |
| test_0007.txt |
AC |
459 ms |
3804 KiB |
| test_0008.txt |
AC |
473 ms |
3796 KiB |
| test_0009.txt |
AC |
509 ms |
3888 KiB |
| test_0010.txt |
AC |
456 ms |
3884 KiB |
| test_0011.txt |
AC |
533 ms |
3752 KiB |
| test_0012.txt |
AC |
495 ms |
3788 KiB |
| test_0013.txt |
AC |
528 ms |
3896 KiB |
| test_0014.txt |
AC |
543 ms |
3896 KiB |
| test_0015.txt |
AC |
442 ms |
3744 KiB |
| test_0016.txt |
AC |
450 ms |
3852 KiB |
| test_0017.txt |
AC |
527 ms |
3748 KiB |
| test_0018.txt |
AC |
492 ms |
3728 KiB |
| test_0019.txt |
AC |
496 ms |
3804 KiB |
| test_0020.txt |
AC |
493 ms |
3744 KiB |
| test_0021.txt |
AC |
491 ms |
3836 KiB |
| test_0022.txt |
AC |
492 ms |
3912 KiB |
| test_0023.txt |
AC |
493 ms |
3848 KiB |
| test_0024.txt |
AC |
485 ms |
3896 KiB |
| test_0025.txt |
AC |
503 ms |
3944 KiB |
| test_0026.txt |
AC |
487 ms |
3864 KiB |
| test_0027.txt |
AC |
508 ms |
3832 KiB |
| test_0028.txt |
AC |
514 ms |
3764 KiB |
| test_0029.txt |
AC |
519 ms |
3744 KiB |
| test_0030.txt |
AC |
500 ms |
3748 KiB |
| test_0031.txt |
AC |
527 ms |
3896 KiB |
| test_0032.txt |
AC |
447 ms |
3888 KiB |
| test_0033.txt |
AC |
534 ms |
3784 KiB |
| test_0034.txt |
AC |
513 ms |
3784 KiB |
| test_0035.txt |
AC |
465 ms |
3740 KiB |
| test_0036.txt |
AC |
506 ms |
3932 KiB |
| test_0037.txt |
AC |
497 ms |
3828 KiB |
| test_0038.txt |
AC |
470 ms |
3848 KiB |
| test_0039.txt |
AC |
476 ms |
3884 KiB |
| test_0040.txt |
AC |
537 ms |
3868 KiB |
| test_0041.txt |
AC |
527 ms |
3796 KiB |
| test_0042.txt |
AC |
525 ms |
3788 KiB |
| test_0043.txt |
AC |
427 ms |
3848 KiB |
| test_0044.txt |
AC |
473 ms |
3888 KiB |
| test_0045.txt |
AC |
494 ms |
3748 KiB |
| test_0046.txt |
AC |
460 ms |
3796 KiB |
| test_0047.txt |
AC |
460 ms |
3728 KiB |
| test_0048.txt |
AC |
518 ms |
3944 KiB |
| test_0049.txt |
AC |
465 ms |
3740 KiB |
| test_0050.txt |
AC |
529 ms |
3788 KiB |
| test_0051.txt |
AC |
492 ms |
3832 KiB |
| test_0052.txt |
AC |
490 ms |
3944 KiB |
| test_0053.txt |
AC |
477 ms |
3848 KiB |
| test_0054.txt |
AC |
514 ms |
3804 KiB |
| test_0055.txt |
AC |
451 ms |
3728 KiB |
| test_0056.txt |
AC |
478 ms |
3740 KiB |
| test_0057.txt |
AC |
494 ms |
3868 KiB |
| test_0058.txt |
AC |
472 ms |
3744 KiB |
| test_0059.txt |
AC |
468 ms |
3896 KiB |
| test_0060.txt |
AC |
442 ms |
3896 KiB |
| test_0061.txt |
AC |
412 ms |
3796 KiB |
| test_0062.txt |
AC |
527 ms |
3944 KiB |
| test_0063.txt |
AC |
589 ms |
3832 KiB |
| test_0064.txt |
AC |
518 ms |
3788 KiB |
| test_0065.txt |
AC |
476 ms |
3888 KiB |
| test_0066.txt |
AC |
485 ms |
3740 KiB |
| test_0067.txt |
AC |
522 ms |
3788 KiB |
| test_0068.txt |
AC |
542 ms |
3740 KiB |
| test_0069.txt |
AC |
558 ms |
3868 KiB |
| test_0070.txt |
AC |
439 ms |
3944 KiB |
| test_0071.txt |
AC |
574 ms |
3812 KiB |
| test_0072.txt |
AC |
472 ms |
3744 KiB |
| test_0073.txt |
AC |
517 ms |
3776 KiB |
| test_0074.txt |
AC |
467 ms |
3704 KiB |
| test_0075.txt |
AC |
470 ms |
3900 KiB |
| test_0076.txt |
AC |
506 ms |
3804 KiB |
| test_0077.txt |
AC |
501 ms |
3892 KiB |
| test_0078.txt |
AC |
514 ms |
3744 KiB |
| test_0079.txt |
AC |
569 ms |
3860 KiB |
| test_0080.txt |
AC |
431 ms |
3912 KiB |
| test_0081.txt |
AC |
557 ms |
3912 KiB |
| test_0082.txt |
AC |
473 ms |
3832 KiB |
| test_0083.txt |
AC |
454 ms |
3744 KiB |
| test_0084.txt |
AC |
513 ms |
3848 KiB |
| test_0085.txt |
AC |
492 ms |
3948 KiB |
| test_0086.txt |
AC |
487 ms |
3932 KiB |
| test_0087.txt |
AC |
482 ms |
3728 KiB |
| test_0088.txt |
AC |
508 ms |
3728 KiB |
| test_0089.txt |
AC |
497 ms |
3748 KiB |
| test_0090.txt |
AC |
528 ms |
3744 KiB |
| test_0091.txt |
AC |
527 ms |
3896 KiB |
| test_0092.txt |
AC |
456 ms |
3788 KiB |
| test_0093.txt |
AC |
434 ms |
3740 KiB |
| test_0094.txt |
AC |
456 ms |
3848 KiB |
| test_0095.txt |
AC |
506 ms |
3832 KiB |
| test_0096.txt |
AC |
497 ms |
3848 KiB |
| test_0097.txt |
AC |
492 ms |
3888 KiB |
| test_0098.txt |
AC |
431 ms |
3804 KiB |
| test_0099.txt |
AC |
476 ms |
3932 KiB |
| test_0100.txt |
AC |
534 ms |
3748 KiB |
| test_0101.txt |
AC |
517 ms |
3728 KiB |
| test_0102.txt |
AC |
460 ms |
3788 KiB |
| test_0103.txt |
AC |
482 ms |
3944 KiB |
| test_0104.txt |
AC |
504 ms |
3788 KiB |
| test_0105.txt |
AC |
487 ms |
3888 KiB |
| test_0106.txt |
AC |
475 ms |
3748 KiB |
| test_0107.txt |
AC |
530 ms |
3828 KiB |
| test_0108.txt |
AC |
497 ms |
3744 KiB |
| test_0109.txt |
AC |
538 ms |
3896 KiB |
| test_0110.txt |
AC |
478 ms |
3848 KiB |
| test_0111.txt |
AC |
498 ms |
3812 KiB |
| test_0112.txt |
AC |
449 ms |
3848 KiB |
| test_0113.txt |
AC |
516 ms |
3852 KiB |
| test_0114.txt |
AC |
473 ms |
3728 KiB |
| test_0115.txt |
AC |
582 ms |
3744 KiB |
| test_0116.txt |
AC |
488 ms |
3744 KiB |
| test_0117.txt |
AC |
513 ms |
3816 KiB |
| test_0118.txt |
AC |
527 ms |
3796 KiB |
| test_0119.txt |
AC |
457 ms |
3784 KiB |
| test_0120.txt |
AC |
542 ms |
3848 KiB |
| test_0121.txt |
AC |
435 ms |
3812 KiB |
| test_0122.txt |
AC |
496 ms |
3828 KiB |
| test_0123.txt |
AC |
467 ms |
3868 KiB |
| test_0124.txt |
AC |
420 ms |
3728 KiB |
| test_0125.txt |
AC |
505 ms |
3788 KiB |
| test_0126.txt |
AC |
459 ms |
3744 KiB |
| test_0127.txt |
AC |
533 ms |
3704 KiB |
| test_0128.txt |
AC |
462 ms |
3848 KiB |
| test_0129.txt |
AC |
469 ms |
3728 KiB |
| test_0130.txt |
AC |
439 ms |
3884 KiB |
| test_0131.txt |
AC |
555 ms |
3728 KiB |
| test_0132.txt |
AC |
500 ms |
3744 KiB |
| test_0133.txt |
AC |
456 ms |
3708 KiB |
| test_0134.txt |
AC |
493 ms |
3788 KiB |
| test_0135.txt |
AC |
498 ms |
3896 KiB |
| test_0136.txt |
AC |
475 ms |
3748 KiB |
| test_0137.txt |
AC |
469 ms |
3828 KiB |
| test_0138.txt |
AC |
522 ms |
3896 KiB |
| test_0139.txt |
AC |
461 ms |
3744 KiB |
| test_0140.txt |
AC |
475 ms |
3804 KiB |
| test_0141.txt |
AC |
476 ms |
3868 KiB |
| test_0142.txt |
AC |
495 ms |
3744 KiB |
| test_0143.txt |
AC |
467 ms |
3776 KiB |
| test_0144.txt |
AC |
480 ms |
3944 KiB |
| test_0145.txt |
AC |
497 ms |
3728 KiB |
| test_0146.txt |
AC |
510 ms |
3728 KiB |
| test_0147.txt |
AC |
548 ms |
3692 KiB |
| test_0148.txt |
AC |
445 ms |
3804 KiB |
| test_0149.txt |
AC |
479 ms |
3884 KiB |