Submission #70299712
Source Code Expand
use std::cmp::{max, min};
use std::io::{self, Read};
fn any_weapon_available(available: &[bool], cur_c: &[i64]) -> bool {
for w in 0..available.len() {
if available[w] && cur_c[w] > 0 {
return true;
}
}
false
}
fn compute_reserved_targets(
n: usize,
opened: &[bool],
rem_h: &[i64],
available: &[bool],
cur_c: &[i64],
a: &Vec<Vec<i64>>,
reserve_coef: f64,
) -> Vec<Option<usize>> {
let mut reserved: Vec<Option<usize>> = vec![None; n];
for w in 0..n {
if !available[w] || cur_c[w] <= 0 {
continue;
}
let mut best_j: Option<usize> = None;
let mut best_val: i64 = -1;
let mut second_val: i64 = -1;
for j in 0..n {
if !opened[j] && rem_h[j] > 0 {
let v = a[w][j];
if v > best_val {
second_val = best_val;
best_val = v;
best_j = Some(j);
} else if v > second_val {
second_val = v;
}
}
}
if best_j.is_none() {
continue;
}
if second_val < 0 {
second_val = 0;
}
if (best_val as f64) >= reserve_coef * (second_val as f64) {
reserved[w] = best_j;
}
}
reserved
}
fn choose_weapon_for_target(
n: usize,
target: usize,
rem_h: &[i64],
available: &[bool],
cur_c: &[i64],
a: &Vec<Vec<i64>>,
waste_coef: f64,
reserved: &Vec<Option<usize>>,
fist_threshold: i64,
) -> (Option<usize>, i64) {
let mut best_w: Option<usize> = None;
let mut best_score: f64 = -1e18;
let mut best_d: i64 = 1;
let rem = rem_h[target];
// 残り硬さが閾値以下なら素手優先
if rem <= fist_threshold {
return (None, 1);
}
let fist_score = min(1, rem) as f64;
best_score = fist_score;
best_w = None;
best_d = 1;
for w in 0..n {
if !available[w] || cur_c[w] <= 0 {
continue;
}
if let Some(t) = reserved[w] {
if t != target {
continue;
}
}
let d = a[w][target];
let waste = max(0, d - rem) as f64;
let effective = min(d, rem) as f64;
let score = effective - waste_coef * waste;
if score > best_score || ((score - best_score).abs() < 1e-12 && d > best_d) {
best_score = score;
best_w = Some(w);
best_d = d;
}
}
(best_w, best_d)
}
fn compute_weapon_value(
n: usize,
j: usize,
opened: &[bool],
rem_h: &[i64],
c: &[i64],
a: &Vec<Vec<i64>>,
) -> i64 {
let mut vals: Vec<i64> = Vec::new();
for k in 0..n {
if !opened[k] && rem_h[k] > 0 && k != j {
vals.push(a[j][k]);
}
}
if vals.is_empty() {
return 0;
}
vals.sort_by(|x, y| y.cmp(x)); // 降順
let cap = min(c[j] as usize, vals.len());
let mut s: i64 = 0;
for i in 0..cap {
s += vals[i];
}
s
}
// 追加: 箱 j の武器を仮に使ったときの「有効削減量」(無駄を除いた合計)
fn compute_effective_weapon_gain(
n: usize,
j: usize,
opened: &[bool],
rem_h: &[i64],
c: &[i64],
a: &Vec<Vec<i64>>,
) -> i64 {
let mut vals: Vec<i64> = Vec::new();
for k in 0..n {
if !opened[k] && rem_h[k] > 0 && k != j {
// 無駄を除くため、min(A[j][k], rem_h[k]) を評価値にする
vals.push(min(a[j][k], rem_h[k]));
}
}
if vals.is_empty() {
return 0;
}
vals.sort_by(|x, y| y.cmp(x)); // 降順
let cap = min(c[j] as usize, vals.len());
let mut s: i64 = 0;
for i in 0..cap {
s += vals[i];
}
s
}
// 変更: A[i][j] >= 100 を候補に、重み(A)降順で辺を試し、サイクルになる辺は無視してDAGを構築(入次数つき)
fn build_pos_edge_graph(n: usize, a: &Vec<Vec<i64>>) -> (Vec<Vec<usize>>, Vec<i32>) {
let mut adj: Vec<Vec<usize>> = vec![Vec::new(); n];
let mut indeg: Vec<i32> = vec![0; n];
// 候補辺を収集(A[i][j] >= 100)して重み降順にソート
let mut edges: Vec<(i64, usize, usize)> = Vec::new();
for i in 0..n {
for j in 0..n {
if i == j {
continue;
}
if a[i][j] >= 50 {
edges.push((a[i][j], i, j));
}
}
}
edges.sort_by(|x, y| y.0.cmp(&x.0)); // 重い順
// サイクルが生じるなら無視して張る
for &(_, i, j) in &edges {
// 既存グラフで j から i へ到達できるなら、i->j を張るとサイクルになる
let mut stack = vec![j];
let mut vis = vec![false; n];
vis[j] = true;
let mut makes_cycle = false;
while let Some(u) = stack.pop() {
if u == i {
makes_cycle = true;
break;
}
for &v in &adj[u] {
if !vis[v] {
vis[v] = true;
stack.push(v);
}
}
}
if makes_cycle {
continue; // サイクルになるので無視
}
adj[i].push(j);
indeg[j] += 1;
}
(adj, indeg)
}
fn run_simulation(
n: usize,
h: &Vec<i64>,
c: &Vec<i64>,
a: &Vec<Vec<i64>>,
waste_coef: f64,
weapon_value_scale: f64,
reserve_coef: f64,
no_weapon_strategy: i32, // 0: 既存(最小remH), 1: 有効削減量最大
fist_threshold: i64, // これ以下の硬さは素手で壊す
topo_priority: bool, // 追加: トポロジカル順優先で箱を開くか
) -> Vec<(i32, i32)> {
let mut rem_h = h.clone(); // 残り硬さ
let mut opened = vec![false; n]; // 箱が開いているか
let mut available = vec![false; n]; // 武器が使用可能か(箱を開けたら True)
let mut cur_c = vec![0_i64; n]; // 各武器の現在の耐久(使用可能なら C[i])
let mut attacks: Vec<(i32, i32)> = Vec::new(); // (w, b) w == -1 なら素手
let mut unopened_count = n as i64;
// トポロジカル順用のグラフ構築(A[i][j] >= 100 のみ、サイクル回避)
let (adj_topo, mut cur_indeg) = if topo_priority {
build_pos_edge_graph(n, a)
} else {
(vec![Vec::new(); n], vec![0i32; n])
};
// main simulation loop
while unopened_count > 0 {
// focus 箱を選ぶ
let mut focus: Option<usize> = None;
// 低硬さの箱があれば最優先で素手で壊す
{
let mut best_rem: Option<i64> = None;
let mut idx: Option<usize> = None;
for j in 0..n {
if !opened[j] && rem_h[j] > 0 && rem_h[j] <= fist_threshold {
if best_rem.is_none() || rem_h[j] < best_rem.unwrap() {
best_rem = Some(rem_h[j]);
idx = Some(j);
}
}
}
if idx.is_some() {
focus = idx;
}
}
// トポロジカル順優先: 現在の入次数が0の箱のうち、有効な武器(未開封へ向く辺)がある箱を優先
if topo_priority && focus.is_none() {
let mut best_rem: Option<i64> = None;
let mut idx: Option<usize> = None;
for j in 0..n {
if opened[j] || rem_h[j] <= 0 {
continue;
}
if cur_indeg[j] == 0 {
// 未開封に向かう辺があるか
let has_useful = adj_topo[j].iter().any(|&v| !opened[v] && rem_h[v] > 0);
if has_useful {
if best_rem.is_none() || rem_h[j] < best_rem.unwrap() {
best_rem = Some(rem_h[j]);
idx = Some(j);
}
}
}
}
if idx.is_some() {
focus = idx;
}
}
// フォールバック: 入次数0の中で従来通り(最小rem)
if topo_priority && focus.is_none() {
let mut best_rem: Option<i64> = None;
let mut idx: Option<usize> = None;
for j in 0..n {
if opened[j] || rem_h[j] <= 0 {
continue;
}
if cur_indeg[j] == 0 {
if best_rem.is_none() || rem_h[j] < best_rem.unwrap() {
best_rem = Some(rem_h[j]);
idx = Some(j);
}
}
}
if idx.is_some() {
focus = idx;
}
}
if focus.is_none() {
if !any_weapon_available(&available, &cur_c) {
if no_weapon_strategy == 0 {
// 最小 remH の箱
let mut min_h: i64 = 1_000_000_000;
let mut idx: Option<usize> = None;
for i in 0..n {
if !opened[i] && rem_h[i] > 0 && rem_h[i] < min_h {
min_h = rem_h[i];
idx = Some(i);
}
}
focus = idx;
} else {
// 追加戦略: 仮にその箱の武器を使用したときの有効削減量が最大の箱を選ぶ
let mut best_gain: i64 = -1;
let mut best_idx: Option<usize> = None;
let mut tie_min_rem: Option<i64> = None;
for j in 0..n {
if opened[j] || rem_h[j] <= 0 {
continue;
}
let gain = compute_effective_weapon_gain(n, j, &opened, &rem_h, &c, &a);
let better = gain > best_gain
|| (gain == best_gain
&& (tie_min_rem.is_none() || rem_h[j] < tie_min_rem.unwrap()));
if better {
best_gain = gain;
best_idx = Some(j);
tie_min_rem = Some(rem_h[j]);
}
}
focus = best_idx;
}
} else {
// コスト最小の箱
let mut best_cost: f64 = f64::INFINITY;
let mut best_tie_rem: Option<i64> = None;
for j in 0..n {
if opened[j] || rem_h[j] <= 0 {
continue;
}
let mut maxd: i64 = 0;
for w in 0..n {
if available[w] && cur_c[w] > 0 {
if a[w][j] > maxd {
maxd = a[w][j];
}
}
}
let base_cost = if maxd <= 0 {
rem_h[j] as f64
} else {
(rem_h[j] as f64) / (maxd as f64)
};
let weapon_value = compute_weapon_value(n, j, &opened, &rem_h, &c, &a) as f64;
let divisor = 1.0 + (weapon_value / weapon_value_scale);
let cost = base_cost / divisor;
let tie_better = match best_tie_rem {
None => true,
Some(r) => rem_h[j] < r,
};
if cost < best_cost - 1e-12 || ((cost - best_cost).abs() < 1e-12 && tie_better) {
best_cost = cost;
focus = Some(j);
best_tie_rem = Some(rem_h[j]);
}
}
}
}
let Some(f) = focus else { break };
// focus が開くまで攻撃
while rem_h[f] > 0 {
let reserved = compute_reserved_targets(n, &opened, &rem_h, &available, &cur_c, &a, reserve_coef);
let (best_w_opt, best_d) = choose_weapon_for_target(
n, f, &rem_h, &available, &cur_c, &a, waste_coef, &reserved, fist_threshold,
);
if best_w_opt.is_none() {
// 素手
attacks.push((-1, f as i32));
rem_h[f] -= 1;
if rem_h[f] <= 0 && !opened[f] {
opened[f] = true;
unopened_count -= 1;
// unlock_weapon(f)
if !available[f] {
available[f] = true;
cur_c[f] = c[f];
}
// トポロジカル入次数更新
for &v in &adj_topo[f] {
cur_indeg[v] -= 1;
}
break;
}
} else {
let widx = best_w_opt.unwrap();
attacks.push((widx as i32, f as i32));
rem_h[f] -= best_d;
cur_c[widx] -= 1;
if rem_h[f] <= 0 && !opened[f] {
opened[f] = true;
unopened_count -= 1;
// unlock_weapon(f)
if !available[f] {
available[f] = true;
cur_c[f] = c[f];
}
// トポロジカル入次数更新
for &v in &adj_topo[f] {
cur_indeg[v] -= 1;
}
break;
}
// まだ続く
}
}
// 開いた後、使える武器を使い切るフェーズ
loop {
// 低硬さの箱が残っているなら拳優先のため中断
let mut has_low = false;
for j in 0..n {
if !opened[j] && rem_h[j] > 0 && rem_h[j] <= fist_threshold {
has_low = true;
break;
}
}
if has_low {
break;
}
let reserved = compute_reserved_targets(n, &opened, &rem_h, &available, &cur_c, &a, reserve_coef);
let mut best_pair: Option<(usize, usize)> = None;
let mut best_pair_score: f64 = -1e-18;
let mut best_pair_damage: i64 = 0;
for w in 0..n {
if !available[w] || cur_c[w] <= 0 {
continue;
}
let mut targets: Vec<usize> = Vec::new();
if let Some(j) = reserved[w] {
if !opened[j] && rem_h[j] > fist_threshold {
targets.push(j);
}
} else {
for j in 0..n {
if !opened[j] && rem_h[j] > fist_threshold {
targets.push(j);
}
}
}
if targets.is_empty() {
continue;
}
// この武器でのベストターゲット
let mut best_j_for_w: Option<usize> = None;
let mut best_score_for_w: f64 = -1e18;
let mut best_d_for_w: i64 = 0;
for &j in &targets {
let d = a[w][j];
let rem = rem_h[j];
let waste = max(0, d - rem) as f64;
let effective = min(d, rem) as f64;
let score = effective - waste_coef * waste;
if score > best_score_for_w
|| ((score - best_score_for_w).abs() < 1e-12 && d > best_d_for_w)
{
best_score_for_w = score;
best_j_for_w = Some(j);
best_d_for_w = d;
}
}
if let Some(bj) = best_j_for_w {
if best_score_for_w > best_pair_score
|| ((best_score_for_w - best_pair_score).abs() < 1e-12
&& best_d_for_w > best_pair_damage)
{
best_pair_score = best_score_for_w;
best_pair = Some((w, bj));
best_pair_damage = best_d_for_w;
}
}
}
let Some((w, j)) = best_pair else { break };
attacks.push((w as i32, j as i32));
rem_h[j] -= a[w][j];
cur_c[w] -= 1;
if rem_h[j] <= 0 && !opened[j] {
opened[j] = true;
unopened_count -= 1;
// unlock_weapon(j)
if !available[j] {
available[j] = true;
cur_c[j] = c[j];
}
// トポロジカル入次数更新
for &v in &adj_topo[j] {
cur_indeg[v] -= 1;
}
}
}
}
attacks
}
fn main() {
// 入力読み取り
let mut input = String::new();
io::stdin().read_to_string(&mut input).unwrap();
let mut it = input.split_whitespace();
let n: usize = match it.next() {
Some(x) => x.parse().unwrap(),
None => return,
};
let mut h = vec![0_i64; n];
for i in 0..n {
h[i] = it.next().unwrap().parse::<i64>().unwrap();
}
let mut c = vec![0_i64; n];
for i in 0..n {
c[i] = it.next().unwrap().parse::<i64>().unwrap();
}
let mut a = vec![vec![0_i64; n]; n];
for i in 0..n {
for j in 0..n {
a[i][j] = it.next().unwrap().parse::<i64>().unwrap();
}
}
// パラメータの候補
let waste_coef_list: [f64; 1] = [0.0];
let weapon_value_scale_list: [f64; 3] = [0.01, 200.0, 1000.0];
let reserve_coef_list: [f64; 3] = [1.0, 2.0, 10.0];
let no_weapon_strategy_list: [i32; 2] = [0, 1];
let topo_flag_list: [bool; 2] = [false, true]; // 追加: トポロジカル順を試すか
// 素手で壊す硬さの閾値
let fist_threshold_list: [i64; 4] = [1, 10, 20, 30];
let mut best_attacks: Option<Vec<(i32, i32)>> = None;
let mut best_len: Option<usize> = None;
for &wc in &waste_coef_list {
for &vs in &weapon_value_scale_list {
for &rc in &reserve_coef_list {
for &ns in &no_weapon_strategy_list {
for &topo in &topo_flag_list {
for &fist_threshold in &fist_threshold_list {
let attacks = run_simulation(
n, &h, &c, &a, wc, vs, rc, ns, fist_threshold, topo,
);
let tlen = attacks.len();
if best_attacks.is_none() || tlen < best_len.unwrap() {
best_len = Some(tlen);
best_attacks = Some(attacks);
}
}
}
}
}
}
}
let best = best_attacks.unwrap();
let mut out = String::new();
for (w, b) in best {
out.push_str(&format!("{} {}\n", w, b));
}
print!("{}", out);
}
Submission Info
| Submission Time | |
|---|---|
| Task | A - Weakpoint |
| User | rlangevin |
| Language | Rust (rustc 1.70.0) |
| Score | 8214484 |
| Code Size | 20194 Byte |
| Status | AC |
| Exec Time | 1448 ms |
| Memory | 2780 KiB |
Compile Error
warning: value assigned to `best_w` is never read --> src/main.rs:66:13 | 66 | let mut best_w: Option<usize> = None; | ^^^^^^ | = help: maybe it is overwritten before being read? = note: `#[warn(unused_assignments)]` on by default warning: value assigned to `best_score` is never read --> src/main.rs:67:13 | 67 | let mut best_score: f64 = -1e18; | ^^^^^^^^^^ | = help: maybe it is overwritten before being read? warning: value assigned to `best_d` is never read --> src/main.rs:68:13 | 68 | let mut best_d: i64 = 1; | ^^^^^^ | = help: maybe it is overwritten before being read?
Judge Result
| Set Name | test_ALL | ||
|---|---|---|---|
| Score / Max Score | 8214484 / 15000000 | ||
| 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 | 963 ms | 2684 KiB |
| test_0001.txt | AC | 823 ms | 2588 KiB |
| test_0002.txt | AC | 999 ms | 2704 KiB |
| test_0003.txt | AC | 1007 ms | 2668 KiB |
| test_0004.txt | AC | 1011 ms | 2540 KiB |
| test_0005.txt | AC | 1111 ms | 2516 KiB |
| test_0006.txt | AC | 1166 ms | 2540 KiB |
| test_0007.txt | AC | 1016 ms | 2640 KiB |
| test_0008.txt | AC | 948 ms | 2512 KiB |
| test_0009.txt | AC | 1087 ms | 2700 KiB |
| test_0010.txt | AC | 982 ms | 2684 KiB |
| test_0011.txt | AC | 929 ms | 2612 KiB |
| test_0012.txt | AC | 1071 ms | 2608 KiB |
| test_0013.txt | AC | 964 ms | 2484 KiB |
| test_0014.txt | AC | 1012 ms | 2616 KiB |
| test_0015.txt | AC | 892 ms | 2748 KiB |
| test_0016.txt | AC | 1015 ms | 2568 KiB |
| test_0017.txt | AC | 996 ms | 2660 KiB |
| test_0018.txt | AC | 1088 ms | 2616 KiB |
| test_0019.txt | AC | 994 ms | 2660 KiB |
| test_0020.txt | AC | 1200 ms | 2584 KiB |
| test_0021.txt | AC | 949 ms | 2736 KiB |
| test_0022.txt | AC | 817 ms | 2524 KiB |
| test_0023.txt | AC | 1073 ms | 2640 KiB |
| test_0024.txt | AC | 1038 ms | 2744 KiB |
| test_0025.txt | AC | 1033 ms | 2488 KiB |
| test_0026.txt | AC | 877 ms | 2636 KiB |
| test_0027.txt | AC | 1061 ms | 2708 KiB |
| test_0028.txt | AC | 996 ms | 2464 KiB |
| test_0029.txt | AC | 1018 ms | 2488 KiB |
| test_0030.txt | AC | 934 ms | 2692 KiB |
| test_0031.txt | AC | 1056 ms | 2688 KiB |
| test_0032.txt | AC | 1050 ms | 2740 KiB |
| test_0033.txt | AC | 985 ms | 2624 KiB |
| test_0034.txt | AC | 871 ms | 2508 KiB |
| test_0035.txt | AC | 1025 ms | 2484 KiB |
| test_0036.txt | AC | 970 ms | 2616 KiB |
| test_0037.txt | AC | 997 ms | 2712 KiB |
| test_0038.txt | AC | 978 ms | 2680 KiB |
| test_0039.txt | AC | 1008 ms | 2556 KiB |
| test_0040.txt | AC | 977 ms | 2624 KiB |
| test_0041.txt | AC | 933 ms | 2712 KiB |
| test_0042.txt | AC | 1034 ms | 2716 KiB |
| test_0043.txt | AC | 1074 ms | 2424 KiB |
| test_0044.txt | AC | 990 ms | 2584 KiB |
| test_0045.txt | AC | 943 ms | 2544 KiB |
| test_0046.txt | AC | 955 ms | 2720 KiB |
| test_0047.txt | AC | 1117 ms | 2512 KiB |
| test_0048.txt | AC | 1154 ms | 2632 KiB |
| test_0049.txt | AC | 1053 ms | 2604 KiB |
| test_0050.txt | AC | 1000 ms | 2500 KiB |
| test_0051.txt | AC | 996 ms | 2480 KiB |
| test_0052.txt | AC | 1042 ms | 2692 KiB |
| test_0053.txt | AC | 1011 ms | 2740 KiB |
| test_0054.txt | AC | 1054 ms | 2444 KiB |
| test_0055.txt | AC | 865 ms | 2732 KiB |
| test_0056.txt | AC | 953 ms | 2536 KiB |
| test_0057.txt | AC | 1094 ms | 2668 KiB |
| test_0058.txt | AC | 1015 ms | 2708 KiB |
| test_0059.txt | AC | 1019 ms | 2308 KiB |
| test_0060.txt | AC | 1057 ms | 2660 KiB |
| test_0061.txt | AC | 1105 ms | 2608 KiB |
| test_0062.txt | AC | 1101 ms | 2728 KiB |
| test_0063.txt | AC | 1149 ms | 2684 KiB |
| test_0064.txt | AC | 952 ms | 2512 KiB |
| test_0065.txt | AC | 1031 ms | 2636 KiB |
| test_0066.txt | AC | 965 ms | 2488 KiB |
| test_0067.txt | AC | 994 ms | 2696 KiB |
| test_0068.txt | AC | 1036 ms | 2728 KiB |
| test_0069.txt | AC | 1046 ms | 2636 KiB |
| test_0070.txt | AC | 934 ms | 2712 KiB |
| test_0071.txt | AC | 943 ms | 2668 KiB |
| test_0072.txt | AC | 1005 ms | 2492 KiB |
| test_0073.txt | AC | 916 ms | 2456 KiB |
| test_0074.txt | AC | 1012 ms | 2780 KiB |
| test_0075.txt | AC | 981 ms | 2556 KiB |
| test_0076.txt | AC | 944 ms | 2576 KiB |
| test_0077.txt | AC | 939 ms | 2672 KiB |
| test_0078.txt | AC | 846 ms | 2704 KiB |
| test_0079.txt | AC | 1140 ms | 2648 KiB |
| test_0080.txt | AC | 994 ms | 2520 KiB |
| test_0081.txt | AC | 977 ms | 2688 KiB |
| test_0082.txt | AC | 1015 ms | 2480 KiB |
| test_0083.txt | AC | 1067 ms | 2672 KiB |
| test_0084.txt | AC | 940 ms | 2568 KiB |
| test_0085.txt | AC | 1037 ms | 2584 KiB |
| test_0086.txt | AC | 904 ms | 2752 KiB |
| test_0087.txt | AC | 1030 ms | 2624 KiB |
| test_0088.txt | AC | 1074 ms | 2648 KiB |
| test_0089.txt | AC | 1010 ms | 2436 KiB |
| test_0090.txt | AC | 984 ms | 2768 KiB |
| test_0091.txt | AC | 1004 ms | 2652 KiB |
| test_0092.txt | AC | 1028 ms | 2736 KiB |
| test_0093.txt | AC | 1084 ms | 2672 KiB |
| test_0094.txt | AC | 914 ms | 2672 KiB |
| test_0095.txt | AC | 962 ms | 2548 KiB |
| test_0096.txt | AC | 1011 ms | 2476 KiB |
| test_0097.txt | AC | 910 ms | 2484 KiB |
| test_0098.txt | AC | 932 ms | 2572 KiB |
| test_0099.txt | AC | 1114 ms | 2688 KiB |
| test_0100.txt | AC | 889 ms | 2636 KiB |
| test_0101.txt | AC | 830 ms | 2692 KiB |
| test_0102.txt | AC | 962 ms | 2636 KiB |
| test_0103.txt | AC | 908 ms | 2464 KiB |
| test_0104.txt | AC | 958 ms | 2544 KiB |
| test_0105.txt | AC | 1159 ms | 2748 KiB |
| test_0106.txt | AC | 1145 ms | 2740 KiB |
| test_0107.txt | AC | 801 ms | 2660 KiB |
| test_0108.txt | AC | 915 ms | 2568 KiB |
| test_0109.txt | AC | 1018 ms | 2572 KiB |
| test_0110.txt | AC | 1030 ms | 2600 KiB |
| test_0111.txt | AC | 967 ms | 2648 KiB |
| test_0112.txt | AC | 1047 ms | 2664 KiB |
| test_0113.txt | AC | 898 ms | 2588 KiB |
| test_0114.txt | AC | 954 ms | 2536 KiB |
| test_0115.txt | AC | 971 ms | 2556 KiB |
| test_0116.txt | AC | 1145 ms | 2564 KiB |
| test_0117.txt | AC | 888 ms | 2564 KiB |
| test_0118.txt | AC | 981 ms | 2664 KiB |
| test_0119.txt | AC | 1448 ms | 2644 KiB |
| test_0120.txt | AC | 1021 ms | 2564 KiB |
| test_0121.txt | AC | 1043 ms | 2592 KiB |
| test_0122.txt | AC | 907 ms | 2768 KiB |
| test_0123.txt | AC | 1095 ms | 2636 KiB |
| test_0124.txt | AC | 1105 ms | 2680 KiB |
| test_0125.txt | AC | 1052 ms | 2404 KiB |
| test_0126.txt | AC | 957 ms | 2600 KiB |
| test_0127.txt | AC | 873 ms | 2596 KiB |
| test_0128.txt | AC | 998 ms | 2752 KiB |
| test_0129.txt | AC | 1356 ms | 2584 KiB |
| test_0130.txt | AC | 910 ms | 2748 KiB |
| test_0131.txt | AC | 968 ms | 2588 KiB |
| test_0132.txt | AC | 947 ms | 2564 KiB |
| test_0133.txt | AC | 906 ms | 2724 KiB |
| test_0134.txt | AC | 961 ms | 2544 KiB |
| test_0135.txt | AC | 1002 ms | 2500 KiB |
| test_0136.txt | AC | 899 ms | 2760 KiB |
| test_0137.txt | AC | 920 ms | 2704 KiB |
| test_0138.txt | AC | 935 ms | 2636 KiB |
| test_0139.txt | AC | 1034 ms | 2416 KiB |
| test_0140.txt | AC | 1094 ms | 2580 KiB |
| test_0141.txt | AC | 1274 ms | 2644 KiB |
| test_0142.txt | AC | 1039 ms | 2704 KiB |
| test_0143.txt | AC | 1084 ms | 2740 KiB |
| test_0144.txt | AC | 874 ms | 2524 KiB |
| test_0145.txt | AC | 896 ms | 2624 KiB |
| test_0146.txt | AC | 942 ms | 2696 KiB |
| test_0147.txt | AC | 1000 ms | 2712 KiB |
| test_0148.txt | AC | 954 ms | 2664 KiB |
| test_0149.txt | AC | 980 ms | 2568 KiB |