Submission #42195967
Source Code Expand
#![allow(non_snake_case)]
use itertools::Itertools;
use proconio::{input, marker::Usize1};
use rustc_hash::FxHashMap;
use std::{cmp::Reverse, collections::BinaryHeap, time::Instant};
use rand::Rng;
const CLIMBING_TEMPERETURE: f64 = 0.;
const RNG_SEED: u128 = 20;
const N: usize = 100;
const INF: usize = 1 << 60;
#[allow(dead_code)]
const TIME_LIMIT: f64 = 1.9;
fn main() {
let timer = TimeKeeper::new(TIME_LIMIT);
let input = Input::from_stdin();
let solution = solve(&input, &timer);
println!("{}", solution);
eprintln!("time: {:.3}[s]", timer.instant.elapsed().as_secs_f64());
}
fn choose_powers(
input: &Input,
state: &mut State,
dists_from_house_to_station: &Vec<Vec<usize>>,
dists: &Vec<Vec<usize>>,
path: &Vec<Vec<Vec<usize>>>,
) {
let mut power_heap = BinaryHeap::new();
state.clear();
for h in 0..input.K {
let mut min_dist = INF;
let mut min_station = 0;
for s in 0..N {
if !state.use_station[s] {
continue;
}
if dists_from_house_to_station[h][s] < min_dist {
min_dist = dists_from_house_to_station[h][s];
min_station = s;
}
}
power_heap.push((min_dist, min_station, h));
}
while let Some((dist, station, house)) = power_heap.pop() {
if state.coverd[house] {
continue;
}
for house in 0..input.K {
if dists_from_house_to_station[house][station] <= dist {
state.coverd[house] = true;
}
}
state.powers[station] = dist;
}
let mut used = vec![false; N];
used[0] = true;
for i in 0..N {
if state.powers[i] > 0 {
used[i] = true;
}
}
let edge_used = spaning_tree(&input, &used, &dists, &path);
for i in 0..input.M {
state.switches[i] = edge_used[i];
}
state.use_station = used;
state.compute_score(&input);
}
fn solve(input: &Input, timer: &TimeKeeper) -> State {
let mut state = State::new(&input);
let (dists, path) = warshall_floyd(&input.graph);
let dists_from_house_to_station = dist_house_to_station(&input);
for i in 0..N {
state.use_station[i] = true;
}
eprintln!("time: {:.3}[s]", timer.instant.elapsed().as_secs_f64());
choose_powers(
input,
&mut state,
&dists_from_house_to_station,
&dists,
&path,
);
let temperature_scheduler = ClimbingTemperatureSchedule {};
simulated_annealing(
&mut state,
&timer,
&temperature_scheduler,
&input,
&dists_from_house_to_station,
&dists,
&path,
);
eprintln!("score: {}", state.score);
state
}
fn spaning_tree(
input: &Input,
used: &Vec<bool>,
dists: &Vec<Vec<usize>>,
path: &Vec<Vec<Vec<usize>>>,
) -> Vec<bool> {
let mut uf = UnionFind::new(N);
let mut edges_heap = BinaryHeap::new();
let mut edge_used = vec![false; input.M];
for i in 0..N {
if !used[i] {
continue;
}
for j in i + 1..N {
if !used[j] {
continue;
}
let mut edge_ids = vec![];
for k in 0..path[i][j].len() - 1 {
let from = path[i][j][k];
let to = path[i][j][k + 1];
let edge_id = input.edge_dicts[&(from, to)];
edge_ids.push(edge_id);
}
edges_heap.push(Reverse((dists[i][j], edge_ids, path[i][j].clone())));
}
}
while let Some(Reverse((_cost, edge_ids, path))) = edges_heap.pop() {
let from = path[0];
let to = path[path.len() - 1];
if uf.is_same(from, to) {
continue;
} else {
uf.unite(from, to);
for edge_id in edge_ids {
edge_used[edge_id] = true;
}
}
}
edge_used
}
fn dist_house_to_station(input: &Input) -> Vec<Vec<usize>> {
let stations = &input.stations;
let houses = &input.houses;
let mut dists = vec![vec![INF; N]; input.K];
for s in 0..N {
for h in 0..input.K {
dists[h][s] = stations[s].dist_ceil(&houses[h]);
// dists[h][s] = stations[s].dist(&houses[h]);
}
}
dists
}
// ワーシャルフロイド法(経路復元有り)
#[allow(dead_code)]
fn warshall_floyd(graph: &Vec<Vec<Edge>>) -> (Vec<Vec<usize>>, Vec<Vec<Vec<usize>>>) {
let mut dist = vec![vec![INF; N]; N];
// どの頂点を経由してiからjに行くかを表す
let mut prev = vec![vec![INF; N]; N];
for i in 0..N {
dist[i][i] = 0;
}
for i in 0..N {
for edge in graph[i].iter() {
dist[edge.from][edge.to] = edge.cost;
prev[edge.from][edge.to] = edge.from;
}
}
for k in 0..N {
for i in 0..N {
for j in 0..N {
if dist[i][j] > dist[i][k] + dist[k][j] {
dist[i][j] = dist[i][k] + dist[k][j];
prev[i][j] = prev[k][j];
}
}
}
}
let mut path = vec![vec![vec![]; N]; N];
for i in 0..N {
for j in 0..N {
path[i][j] = restore_path(&prev, i, j);
}
}
(dist, path)
}
// prevをもとに経路復元
#[allow(dead_code)]
fn restore_path(prev: &Vec<Vec<usize>>, s: usize, t: usize) -> Vec<usize> {
let mut path = vec![];
let mut cur = t;
while cur != s {
path.push(cur);
cur = prev[s][cur];
}
path.push(s);
path.reverse();
path
}
#[derive(Debug, Clone)]
struct Point {
x: isize,
y: isize,
}
impl Point {
fn new(x: isize, y: isize) -> Self {
Self { x, y }
}
#[allow(dead_code)]
fn dist(&self, other: &Self) -> usize {
let dx = self.x - other.x;
let dy = self.y - other.y;
((dx * dx + dy * dy) as f64).sqrt().round() as usize
}
// Pのほうはroundではだめ?
fn dist_ceil(&self, other: &Self) -> usize {
let dx = self.x - other.x;
let dy = self.y - other.y;
((dx * dx + dy * dy) as f64).sqrt().ceil() as usize
}
}
#[derive(Debug, Clone)]
struct Edge {
from: usize,
to: usize,
cost: usize,
}
impl Edge {
fn new(from: usize, to: usize, cost: usize) -> Self {
Self { from, to, cost }
}
}
#[derive(Debug, Clone)]
#[allow(dead_code)]
struct Input {
M: usize,
K: usize,
stations: Vec<Point>,
UVW: Vec<(usize, usize, usize)>,
edges: Vec<Edge>,
houses: Vec<Point>,
graph: Vec<Vec<Edge>>,
edge_dicts: FxHashMap<(usize, usize), usize>,
}
impl Input {
fn from_stdin() -> Self {
input! {
_N: usize,
M: usize,
K: usize,
XY_: [(isize, isize); N],
UVW: [(Usize1, Usize1, usize); M],
AB_: [(isize, isize); K],
}
let stations = XY_.into_iter().map(|(x, y)| Point::new(x, y)).collect();
let houses = AB_.into_iter().map(|(x, y)| Point::new(x, y)).collect();
let edges: Vec<Edge> = UVW
.clone()
.into_iter()
.map(|(u, v, w)| Edge::new(u, v, w))
.collect();
let mut graph = vec![vec![]; N];
for &(u, v, cost) in UVW.iter() {
graph[u].push(Edge::new(u, v, cost));
graph[v].push(Edge::new(v, u, cost));
}
let mut edge_dicts = FxHashMap::default();
for (i, e) in edges.iter().enumerate() {
edge_dicts.entry((e.from, e.to)).or_insert(i);
edge_dicts.entry((e.to, e.from)).or_insert(i);
}
Self {
M,
K,
stations,
UVW,
edges,
houses,
graph,
edge_dicts,
}
}
}
/// 時間計測を行うstruct
#[derive(Debug, Clone)]
struct TimeKeeper {
instant: Instant,
time_limit: f64,
}
impl TimeKeeper {
fn new(time_limit: f64) -> Self {
Self {
instant: Instant::now(),
time_limit,
}
}
fn intime(&self) -> bool {
self.instant.elapsed().as_secs_f64() < self.time_limit
}
}
/// 最大化問題としたときの確率(最小化のときはマイナスしとけばよい?)
#[inline]
fn probability(new_score: usize, old_score: usize, temperature: f64) -> f64 {
if temperature == CLIMBING_TEMPERETURE {
0.
} else {
f64::exp((new_score as f64 - old_score as f64) / temperature)
}
}
/// 温度管理トレイト
trait TemperatureScheduler {
fn get_temperature(&self, timekeeper: &TimeKeeper) -> f64;
}
/// 指数スケジューリング
#[derive(Debug, Clone)]
struct ExponentialTemperatureSchedule {
initial_temperature: f64,
end_temperature: f64,
}
impl ExponentialTemperatureSchedule {
fn new(initial_temperature: f64, end_temperature: f64) -> Self {
Self {
initial_temperature,
end_temperature,
}
}
}
impl TemperatureScheduler for ExponentialTemperatureSchedule {
fn get_temperature(&self, timekeeper: &TimeKeeper) -> f64 {
let t = timekeeper.instant.elapsed().as_secs_f64() / timekeeper.time_limit;
self.initial_temperature.powf(1.0 - t) * self.end_temperature.powf(t)
}
}
/// 山登り用温度管理
struct ClimbingTemperatureSchedule {}
impl TemperatureScheduler for ClimbingTemperatureSchedule {
fn get_temperature(&self, _: &TimeKeeper) -> f64 {
CLIMBING_TEMPERETURE
}
}
trait AnnealingState {
fn get_score(&self) -> usize;
fn rollback(&mut self, diff: &DiffState);
}
#[derive(Debug, Clone)]
struct State {
score: usize,
powers: Vec<usize>,
switches: Vec<bool>,
coverd: Vec<bool>,
use_station: Vec<bool>,
}
impl State {
fn new(input: &Input) -> Self {
Self {
score: 0,
powers: vec![0; N],
switches: vec![false; input.M],
coverd: vec![false; input.K],
use_station: vec![false; N],
}
}
fn clear(&mut self) {
self.score = 0;
self.powers = vec![0; N];
self.switches = vec![false; self.switches.len()];
self.coverd = vec![false; self.coverd.len()];
}
fn compute_score(&mut self, input: &Input) {
if self.coverd.iter().all(|x| *x) {
let mut S = 0;
for &p in self.powers.iter() {
if p > 5000 {
self.score = 0;
return;
}
S += p * p;
}
for i in 0..input.M {
if self.switches[i] {
S += input.edges[i].cost;
}
}
self.score =
(1_000_000. * (1. + 100_000_000. / (S as f64 + 10_000_000.))).round() as usize;
} else {
let mut n = 0;
for &c in self.coverd.iter() {
if c {
n += 1;
}
}
self.score = (1_000_000. * ((1. + n as f64) / input.K as f64)).round() as usize;
}
}
}
impl AnnealingState for State {
#[inline]
fn get_score(&self) -> usize {
self.score
}
fn rollback(&mut self, diff: &DiffState) {
*self = diff.state.clone();
}
}
impl std::fmt::Display for State {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
writeln!(f, "{}", self.powers.iter().join(" "))?;
write!(
f,
"{}",
self.switches
.iter()
.map(|&b| if b { 1 } else { 0 })
.join(" ")
)
}
}
struct DiffState {
// TODO: その他復元に必要な情報を
old_score: usize,
state: State,
}
trait AnnealingTransition {
fn transition(
&self,
state: &mut State,
rng: &mut rand_pcg::Pcg64Mcg,
input: &Input,
dists_from_house_to_station: &Vec<Vec<usize>>,
dists: &Vec<Vec<usize>>,
path: &Vec<Vec<Vec<usize>>>,
) -> DiffState;
}
/// TODO: 名前変える。遷移毎に生成
struct OneRemoveTransition {}
impl AnnealingTransition for OneRemoveTransition {
fn transition(
&self,
state: &mut State,
rng: &mut rand_pcg::Pcg64Mcg,
input: &Input,
dists_from_house_to_station: &Vec<Vec<usize>>,
dists: &Vec<Vec<usize>>,
path: &Vec<Vec<Vec<usize>>>,
) -> DiffState {
let old_score = state.get_score();
let diff_state = DiffState {
old_score,
state: state.clone(),
};
let mut cand = vec![];
for (i, used) in state.use_station.iter().enumerate() {
if *used {
cand.push(i);
}
}
let remove_idx = cand[rng.gen_range(0, cand.len())];
state.use_station[remove_idx] = false;
choose_powers(&input, state, &dists_from_house_to_station, &dists, &path);
state.compute_score(&input);
diff_state
}
}
struct AddAndRemoveTransition {}
impl AnnealingTransition for AddAndRemoveTransition {
fn transition(
&self,
state: &mut State,
rng: &mut rand_pcg::Pcg64Mcg,
input: &Input,
dists_from_house_to_station: &Vec<Vec<usize>>,
dists: &Vec<Vec<usize>>,
path: &Vec<Vec<Vec<usize>>>,
) -> DiffState {
let old_score = state.get_score();
let diff_state = DiffState {
old_score,
state: state.clone(),
};
let mut cand_remove = vec![];
let mut cand_add = vec![];
for (i, used) in state.use_station.iter().enumerate() {
if *used {
cand_remove.push(i);
} else {
cand_add.push(i);
}
}
let remove_idx = cand_remove[rng.gen_range(0, cand_remove.len())];
let add_idx = cand_add[rng.gen_range(0, cand_add.len())];
state.use_station[remove_idx] = false;
state.use_station[add_idx] = true;
choose_powers(&input, state, &dists_from_house_to_station, &dists, &path);
state.compute_score(&input);
diff_state
}
}
fn simulated_annealing<T: TemperatureScheduler>(
state: &mut State,
timekeeper: &TimeKeeper,
temperature_scheduler: &T,
input: &Input,
dists_from_house_to_station: &Vec<Vec<usize>>,
dists: &Vec<Vec<usize>>,
path: &Vec<Vec<Vec<usize>>>,
) {
let mut rng = rand_pcg::Pcg64Mcg::new(RNG_SEED);
let mut best_state = state.clone();
let mut temperature = temperature_scheduler.get_temperature(&timekeeper);
let mut cnt = 0;
let mut accepted_cnt = 0;
let mut score_update_cnt = 0;
let init_score = state.get_score();
let update_per_cnt = 100;
let neighbor_creater = OneRemoveTransition {};
while timekeeper.intime() {
cnt += 1;
if cnt % update_per_cnt == 0 {
temperature = temperature_scheduler.get_temperature(&timekeeper);
}
let old_score = state.get_score();
let diff_state = neighbor_creater.transition(
state,
&mut rng,
&input,
&dists_from_house_to_station,
&dists,
&path,
);
let new_score = state.get_score();
if new_score > old_score || rng.gen_bool(probability(new_score, old_score, temperature)) {
if new_score > old_score {
best_state = state.clone();
score_update_cnt += 1;
}
accepted_cnt += 1
} else {
state.rollback(&diff_state);
}
}
*state = best_state;
eprintln!("-----------start Simulated Annealing--------------");
eprintln!(
"accepted / iter: {}/{}, {}%",
accepted_cnt,
cnt,
(accepted_cnt * 100) as f64 / cnt as f64
);
eprintln!(
"score update / iter: {}/{}, {}%",
score_update_cnt,
cnt,
(score_update_cnt * 100) as f64 / cnt as f64
);
eprintln!("init score: {}", init_score);
eprintln!("final score: {}", state.get_score());
eprintln!("-----------end Simulated Annealing--------------");
}
#[derive(Debug, Clone)]
pub struct UnionFind {
parent_or_size: Vec<i64>,
}
impl UnionFind {
pub fn new(n: usize) -> Self {
let parent_or_size = vec![-1; n];
Self { parent_or_size }
}
pub fn root(&mut self, x: usize) -> usize {
if self.parent_or_size[x] < 0 {
x
} else {
self.parent_or_size[x] = self.root(self.parent_or_size[x] as usize) as i64;
self.parent_or_size[x] as usize
}
}
pub fn is_same(&mut self, x: usize, y: usize) -> bool {
self.root(x) == self.root(y)
}
pub fn size(&mut self, x: usize) -> usize {
let x = self.root(x);
(-self.parent_or_size[x]) as usize
}
pub fn unite(&mut self, x: usize, y: usize) {
let x = self.root(x);
let y = self.root(y);
if x == y {
return;
}
// 大きい木の根に小さい木をくっつける
if self.size(x) < self.size(y) {
self.parent_or_size[y] += self.parent_or_size[x];
self.parent_or_size[x] = y as i64;
} else {
self.parent_or_size[x] += self.parent_or_size[y];
self.parent_or_size[y] = x as i64;
}
}
}
Submission Info
| Submission Time | |
|---|---|
| Task | A - Broadcasting |
| User | poka |
| Language | Rust (1.42.0) |
| Score | 486037099 |
| Code Size | 18237 Byte |
| Status | AC |
| Exec Time | 1907 ms |
| Memory | 9144 KiB |
Compile Error
warning: method is never used: `new`
--> src/main.rs:362:5
|
362 | fn new(initial_temperature: f64, end_temperature: f64) -> Self {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(dead_code)]` on by default
warning: field is never read: `old_score`
--> src/main.rs:473:5
|
473 | old_score: usize,
| ^^^^^^^^^^^^^^^^
Judge Result
| Set Name | test_ALL | ||
|---|---|---|---|
| Score / Max Score | 486037099 / 3300000000 | ||
| 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, test_0150.txt, test_0151.txt, test_0152.txt, test_0153.txt, test_0154.txt, test_0155.txt, test_0156.txt, test_0157.txt, test_0158.txt, test_0159.txt, test_0160.txt, test_0161.txt, test_0162.txt, test_0163.txt, test_0164.txt, test_0165.txt, test_0166.txt, test_0167.txt, test_0168.txt, test_0169.txt, test_0170.txt, test_0171.txt, test_0172.txt, test_0173.txt, test_0174.txt, test_0175.txt, test_0176.txt, test_0177.txt, test_0178.txt, test_0179.txt, test_0180.txt, test_0181.txt, test_0182.txt, test_0183.txt, test_0184.txt, test_0185.txt, test_0186.txt, test_0187.txt, test_0188.txt, test_0189.txt, test_0190.txt, test_0191.txt, test_0192.txt, test_0193.txt, test_0194.txt, test_0195.txt, test_0196.txt, test_0197.txt, test_0198.txt, test_0199.txt, test_0200.txt, test_0201.txt, test_0202.txt, test_0203.txt, test_0204.txt, test_0205.txt, test_0206.txt, test_0207.txt, test_0208.txt, test_0209.txt, test_0210.txt, test_0211.txt, test_0212.txt, test_0213.txt, test_0214.txt, test_0215.txt, test_0216.txt, test_0217.txt, test_0218.txt, test_0219.txt, test_0220.txt, test_0221.txt, test_0222.txt, test_0223.txt, test_0224.txt, test_0225.txt, test_0226.txt, test_0227.txt, test_0228.txt, test_0229.txt, test_0230.txt, test_0231.txt, test_0232.txt, test_0233.txt, test_0234.txt, test_0235.txt, test_0236.txt, test_0237.txt, test_0238.txt, test_0239.txt, test_0240.txt, test_0241.txt, test_0242.txt, test_0243.txt, test_0244.txt, test_0245.txt, test_0246.txt, test_0247.txt, test_0248.txt, test_0249.txt, test_0250.txt, test_0251.txt, test_0252.txt, test_0253.txt, test_0254.txt, test_0255.txt, test_0256.txt, test_0257.txt, test_0258.txt, test_0259.txt, test_0260.txt, test_0261.txt, test_0262.txt, test_0263.txt, test_0264.txt, test_0265.txt, test_0266.txt, test_0267.txt, test_0268.txt, test_0269.txt, test_0270.txt, test_0271.txt, test_0272.txt, test_0273.txt, test_0274.txt, test_0275.txt, test_0276.txt, test_0277.txt, test_0278.txt, test_0279.txt, test_0280.txt, test_0281.txt, test_0282.txt, test_0283.txt, test_0284.txt, test_0285.txt, test_0286.txt, test_0287.txt, test_0288.txt, test_0289.txt, test_0290.txt, test_0291.txt, test_0292.txt, test_0293.txt, test_0294.txt, test_0295.txt, test_0296.txt, test_0297.txt, test_0298.txt, test_0299.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| test_0000.txt | AC | 1907 ms | 7296 KiB |
| test_0001.txt | AC | 1903 ms | 8552 KiB |
| test_0002.txt | AC | 1902 ms | 6436 KiB |
| test_0003.txt | AC | 1903 ms | 8504 KiB |
| test_0004.txt | AC | 1903 ms | 9144 KiB |
| test_0005.txt | AC | 1903 ms | 8236 KiB |
| test_0006.txt | AC | 1902 ms | 6188 KiB |
| test_0007.txt | AC | 1903 ms | 8244 KiB |
| test_0008.txt | AC | 1902 ms | 7808 KiB |
| test_0009.txt | AC | 1903 ms | 8304 KiB |
| test_0010.txt | AC | 1902 ms | 7680 KiB |
| test_0011.txt | AC | 1903 ms | 8900 KiB |
| test_0012.txt | AC | 1902 ms | 7092 KiB |
| test_0013.txt | AC | 1903 ms | 6956 KiB |
| test_0014.txt | AC | 1903 ms | 7828 KiB |
| test_0015.txt | AC | 1902 ms | 6552 KiB |
| test_0016.txt | AC | 1903 ms | 6760 KiB |
| test_0017.txt | AC | 1902 ms | 6564 KiB |
| test_0018.txt | AC | 1903 ms | 7968 KiB |
| test_0019.txt | AC | 1903 ms | 7204 KiB |
| test_0020.txt | AC | 1903 ms | 7468 KiB |
| test_0021.txt | AC | 1902 ms | 6340 KiB |
| test_0022.txt | AC | 1903 ms | 6704 KiB |
| test_0023.txt | AC | 1903 ms | 8464 KiB |
| test_0024.txt | AC | 1903 ms | 8720 KiB |
| test_0025.txt | AC | 1903 ms | 8596 KiB |
| test_0026.txt | AC | 1903 ms | 7856 KiB |
| test_0027.txt | AC | 1903 ms | 6640 KiB |
| test_0028.txt | AC | 1903 ms | 8724 KiB |
| test_0029.txt | AC | 1903 ms | 6604 KiB |
| test_0030.txt | AC | 1903 ms | 6904 KiB |
| test_0031.txt | AC | 1903 ms | 7136 KiB |
| test_0032.txt | AC | 1902 ms | 8184 KiB |
| test_0033.txt | AC | 1903 ms | 8320 KiB |
| test_0034.txt | AC | 1902 ms | 6192 KiB |
| test_0035.txt | AC | 1902 ms | 6564 KiB |
| test_0036.txt | AC | 1902 ms | 6552 KiB |
| test_0037.txt | AC | 1902 ms | 6660 KiB |
| test_0038.txt | AC | 1903 ms | 8316 KiB |
| test_0039.txt | AC | 1902 ms | 6440 KiB |
| test_0040.txt | AC | 1902 ms | 6328 KiB |
| test_0041.txt | AC | 1902 ms | 6476 KiB |
| test_0042.txt | AC | 1902 ms | 8744 KiB |
| test_0043.txt | AC | 1903 ms | 7424 KiB |
| test_0044.txt | AC | 1903 ms | 6996 KiB |
| test_0045.txt | AC | 1903 ms | 8300 KiB |
| test_0046.txt | AC | 1903 ms | 7244 KiB |
| test_0047.txt | AC | 1902 ms | 7036 KiB |
| test_0048.txt | AC | 1903 ms | 7980 KiB |
| test_0049.txt | AC | 1903 ms | 8204 KiB |
| test_0050.txt | AC | 1902 ms | 7428 KiB |
| test_0051.txt | AC | 1903 ms | 6760 KiB |
| test_0052.txt | AC | 1903 ms | 7476 KiB |
| test_0053.txt | AC | 1903 ms | 8056 KiB |
| test_0054.txt | AC | 1903 ms | 7652 KiB |
| test_0055.txt | AC | 1903 ms | 7936 KiB |
| test_0056.txt | AC | 1903 ms | 6896 KiB |
| test_0057.txt | AC | 1902 ms | 6808 KiB |
| test_0058.txt | AC | 1903 ms | 8328 KiB |
| test_0059.txt | AC | 1902 ms | 8640 KiB |
| test_0060.txt | AC | 1902 ms | 8296 KiB |
| test_0061.txt | AC | 1902 ms | 6540 KiB |
| test_0062.txt | AC | 1902 ms | 7132 KiB |
| test_0063.txt | AC | 1902 ms | 8376 KiB |
| test_0064.txt | AC | 1903 ms | 7392 KiB |
| test_0065.txt | AC | 1902 ms | 7420 KiB |
| test_0066.txt | AC | 1903 ms | 6712 KiB |
| test_0067.txt | AC | 1903 ms | 7172 KiB |
| test_0068.txt | AC | 1903 ms | 7352 KiB |
| test_0069.txt | AC | 1903 ms | 7492 KiB |
| test_0070.txt | AC | 1903 ms | 8432 KiB |
| test_0071.txt | AC | 1902 ms | 6732 KiB |
| test_0072.txt | AC | 1903 ms | 8360 KiB |
| test_0073.txt | AC | 1903 ms | 7548 KiB |
| test_0074.txt | AC | 1902 ms | 7888 KiB |
| test_0075.txt | AC | 1903 ms | 8016 KiB |
| test_0076.txt | AC | 1903 ms | 6860 KiB |
| test_0077.txt | AC | 1903 ms | 6368 KiB |
| test_0078.txt | AC | 1902 ms | 6496 KiB |
| test_0079.txt | AC | 1903 ms | 7576 KiB |
| test_0080.txt | AC | 1903 ms | 8208 KiB |
| test_0081.txt | AC | 1903 ms | 6660 KiB |
| test_0082.txt | AC | 1902 ms | 7560 KiB |
| test_0083.txt | AC | 1903 ms | 8272 KiB |
| test_0084.txt | AC | 1902 ms | 8408 KiB |
| test_0085.txt | AC | 1903 ms | 8308 KiB |
| test_0086.txt | AC | 1903 ms | 7764 KiB |
| test_0087.txt | AC | 1902 ms | 7000 KiB |
| test_0088.txt | AC | 1903 ms | 8716 KiB |
| test_0089.txt | AC | 1903 ms | 6452 KiB |
| test_0090.txt | AC | 1902 ms | 6932 KiB |
| test_0091.txt | AC | 1902 ms | 6888 KiB |
| test_0092.txt | AC | 1903 ms | 7572 KiB |
| test_0093.txt | AC | 1902 ms | 7212 KiB |
| test_0094.txt | AC | 1903 ms | 6328 KiB |
| test_0095.txt | AC | 1902 ms | 6108 KiB |
| test_0096.txt | AC | 1902 ms | 6672 KiB |
| test_0097.txt | AC | 1903 ms | 8876 KiB |
| test_0098.txt | AC | 1902 ms | 6260 KiB |
| test_0099.txt | AC | 1903 ms | 8788 KiB |
| test_0100.txt | AC | 1902 ms | 6360 KiB |
| test_0101.txt | AC | 1903 ms | 7240 KiB |
| test_0102.txt | AC | 1903 ms | 7048 KiB |
| test_0103.txt | AC | 1903 ms | 8064 KiB |
| test_0104.txt | AC | 1903 ms | 8900 KiB |
| test_0105.txt | AC | 1902 ms | 6544 KiB |
| test_0106.txt | AC | 1903 ms | 6712 KiB |
| test_0107.txt | AC | 1903 ms | 8580 KiB |
| test_0108.txt | AC | 1903 ms | 8632 KiB |
| test_0109.txt | AC | 1903 ms | 8004 KiB |
| test_0110.txt | AC | 1903 ms | 8084 KiB |
| test_0111.txt | AC | 1903 ms | 8176 KiB |
| test_0112.txt | AC | 1902 ms | 6396 KiB |
| test_0113.txt | AC | 1902 ms | 8792 KiB |
| test_0114.txt | AC | 1903 ms | 9000 KiB |
| test_0115.txt | AC | 1903 ms | 8192 KiB |
| test_0116.txt | AC | 1902 ms | 8392 KiB |
| test_0117.txt | AC | 1902 ms | 6300 KiB |
| test_0118.txt | AC | 1903 ms | 6340 KiB |
| test_0119.txt | AC | 1902 ms | 7592 KiB |
| test_0120.txt | AC | 1903 ms | 8476 KiB |
| test_0121.txt | AC | 1903 ms | 8344 KiB |
| test_0122.txt | AC | 1902 ms | 8960 KiB |
| test_0123.txt | AC | 1902 ms | 6700 KiB |
| test_0124.txt | AC | 1903 ms | 6876 KiB |
| test_0125.txt | AC | 1903 ms | 7816 KiB |
| test_0126.txt | AC | 1903 ms | 7752 KiB |
| test_0127.txt | AC | 1902 ms | 7364 KiB |
| test_0128.txt | AC | 1903 ms | 6668 KiB |
| test_0129.txt | AC | 1903 ms | 7452 KiB |
| test_0130.txt | AC | 1903 ms | 7788 KiB |
| test_0131.txt | AC | 1902 ms | 8044 KiB |
| test_0132.txt | AC | 1903 ms | 6812 KiB |
| test_0133.txt | AC | 1903 ms | 6800 KiB |
| test_0134.txt | AC | 1903 ms | 6656 KiB |
| test_0135.txt | AC | 1903 ms | 6436 KiB |
| test_0136.txt | AC | 1903 ms | 7092 KiB |
| test_0137.txt | AC | 1903 ms | 7372 KiB |
| test_0138.txt | AC | 1903 ms | 8288 KiB |
| test_0139.txt | AC | 1903 ms | 6440 KiB |
| test_0140.txt | AC | 1903 ms | 8080 KiB |
| test_0141.txt | AC | 1902 ms | 7324 KiB |
| test_0142.txt | AC | 1903 ms | 7828 KiB |
| test_0143.txt | AC | 1902 ms | 8136 KiB |
| test_0144.txt | AC | 1903 ms | 8700 KiB |
| test_0145.txt | AC | 1903 ms | 6852 KiB |
| test_0146.txt | AC | 1903 ms | 7636 KiB |
| test_0147.txt | AC | 1903 ms | 7012 KiB |
| test_0148.txt | AC | 1903 ms | 7428 KiB |
| test_0149.txt | AC | 1902 ms | 7436 KiB |
| test_0150.txt | AC | 1903 ms | 8268 KiB |
| test_0151.txt | AC | 1904 ms | 8600 KiB |
| test_0152.txt | AC | 1904 ms | 8656 KiB |
| test_0153.txt | AC | 1903 ms | 7856 KiB |
| test_0154.txt | AC | 1903 ms | 6476 KiB |
| test_0155.txt | AC | 1903 ms | 8728 KiB |
| test_0156.txt | AC | 1903 ms | 8480 KiB |
| test_0157.txt | AC | 1903 ms | 7304 KiB |
| test_0158.txt | AC | 1903 ms | 8548 KiB |
| test_0159.txt | AC | 1903 ms | 7204 KiB |
| test_0160.txt | AC | 1903 ms | 8404 KiB |
| test_0161.txt | AC | 1902 ms | 6876 KiB |
| test_0162.txt | AC | 1902 ms | 7024 KiB |
| test_0163.txt | AC | 1903 ms | 8320 KiB |
| test_0164.txt | AC | 1903 ms | 8944 KiB |
| test_0165.txt | AC | 1903 ms | 7684 KiB |
| test_0166.txt | AC | 1903 ms | 7336 KiB |
| test_0167.txt | AC | 1903 ms | 7760 KiB |
| test_0168.txt | AC | 1903 ms | 8280 KiB |
| test_0169.txt | AC | 1903 ms | 9040 KiB |
| test_0170.txt | AC | 1903 ms | 7480 KiB |
| test_0171.txt | AC | 1903 ms | 8908 KiB |
| test_0172.txt | AC | 1903 ms | 8568 KiB |
| test_0173.txt | AC | 1903 ms | 8384 KiB |
| test_0174.txt | AC | 1902 ms | 6152 KiB |
| test_0175.txt | AC | 1903 ms | 6572 KiB |
| test_0176.txt | AC | 1903 ms | 7844 KiB |
| test_0177.txt | AC | 1902 ms | 7448 KiB |
| test_0178.txt | AC | 1903 ms | 8164 KiB |
| test_0179.txt | AC | 1902 ms | 6912 KiB |
| test_0180.txt | AC | 1903 ms | 6916 KiB |
| test_0181.txt | AC | 1903 ms | 8564 KiB |
| test_0182.txt | AC | 1902 ms | 8128 KiB |
| test_0183.txt | AC | 1903 ms | 7728 KiB |
| test_0184.txt | AC | 1903 ms | 6912 KiB |
| test_0185.txt | AC | 1903 ms | 7496 KiB |
| test_0186.txt | AC | 1903 ms | 8984 KiB |
| test_0187.txt | AC | 1902 ms | 6512 KiB |
| test_0188.txt | AC | 1903 ms | 7428 KiB |
| test_0189.txt | AC | 1903 ms | 8512 KiB |
| test_0190.txt | AC | 1903 ms | 8204 KiB |
| test_0191.txt | AC | 1902 ms | 6408 KiB |
| test_0192.txt | AC | 1902 ms | 6396 KiB |
| test_0193.txt | AC | 1903 ms | 8680 KiB |
| test_0194.txt | AC | 1903 ms | 6404 KiB |
| test_0195.txt | AC | 1903 ms | 7112 KiB |
| test_0196.txt | AC | 1902 ms | 7852 KiB |
| test_0197.txt | AC | 1902 ms | 7216 KiB |
| test_0198.txt | AC | 1903 ms | 6972 KiB |
| test_0199.txt | AC | 1903 ms | 7220 KiB |
| test_0200.txt | AC | 1903 ms | 7648 KiB |
| test_0201.txt | AC | 1902 ms | 6908 KiB |
| test_0202.txt | AC | 1902 ms | 6636 KiB |
| test_0203.txt | AC | 1902 ms | 6596 KiB |
| test_0204.txt | AC | 1902 ms | 6776 KiB |
| test_0205.txt | AC | 1903 ms | 8760 KiB |
| test_0206.txt | AC | 1902 ms | 6868 KiB |
| test_0207.txt | AC | 1903 ms | 8196 KiB |
| test_0208.txt | AC | 1903 ms | 6720 KiB |
| test_0209.txt | AC | 1903 ms | 7560 KiB |
| test_0210.txt | AC | 1903 ms | 8844 KiB |
| test_0211.txt | AC | 1902 ms | 6492 KiB |
| test_0212.txt | AC | 1903 ms | 7764 KiB |
| test_0213.txt | AC | 1903 ms | 8768 KiB |
| test_0214.txt | AC | 1903 ms | 8260 KiB |
| test_0215.txt | AC | 1903 ms | 8700 KiB |
| test_0216.txt | AC | 1903 ms | 8372 KiB |
| test_0217.txt | AC | 1903 ms | 7624 KiB |
| test_0218.txt | AC | 1903 ms | 7024 KiB |
| test_0219.txt | AC | 1903 ms | 8568 KiB |
| test_0220.txt | AC | 1903 ms | 6624 KiB |
| test_0221.txt | AC | 1902 ms | 6260 KiB |
| test_0222.txt | AC | 1903 ms | 7084 KiB |
| test_0223.txt | AC | 1903 ms | 8488 KiB |
| test_0224.txt | AC | 1903 ms | 7608 KiB |
| test_0225.txt | AC | 1902 ms | 7244 KiB |
| test_0226.txt | AC | 1903 ms | 8880 KiB |
| test_0227.txt | AC | 1902 ms | 6412 KiB |
| test_0228.txt | AC | 1902 ms | 6696 KiB |
| test_0229.txt | AC | 1902 ms | 6608 KiB |
| test_0230.txt | AC | 1902 ms | 7852 KiB |
| test_0231.txt | AC | 1902 ms | 6308 KiB |
| test_0232.txt | AC | 1903 ms | 8596 KiB |
| test_0233.txt | AC | 1903 ms | 7940 KiB |
| test_0234.txt | AC | 1903 ms | 6456 KiB |
| test_0235.txt | AC | 1903 ms | 6708 KiB |
| test_0236.txt | AC | 1906 ms | 8728 KiB |
| test_0237.txt | AC | 1903 ms | 6956 KiB |
| test_0238.txt | AC | 1902 ms | 6480 KiB |
| test_0239.txt | AC | 1903 ms | 7716 KiB |
| test_0240.txt | AC | 1902 ms | 6432 KiB |
| test_0241.txt | AC | 1903 ms | 8500 KiB |
| test_0242.txt | AC | 1903 ms | 7816 KiB |
| test_0243.txt | AC | 1903 ms | 7980 KiB |
| test_0244.txt | AC | 1903 ms | 8200 KiB |
| test_0245.txt | AC | 1903 ms | 7884 KiB |
| test_0246.txt | AC | 1903 ms | 7988 KiB |
| test_0247.txt | AC | 1902 ms | 7536 KiB |
| test_0248.txt | AC | 1903 ms | 7872 KiB |
| test_0249.txt | AC | 1903 ms | 6996 KiB |
| test_0250.txt | AC | 1903 ms | 8196 KiB |
| test_0251.txt | AC | 1902 ms | 7700 KiB |
| test_0252.txt | AC | 1903 ms | 7232 KiB |
| test_0253.txt | AC | 1903 ms | 8172 KiB |
| test_0254.txt | AC | 1902 ms | 8892 KiB |
| test_0255.txt | AC | 1903 ms | 7448 KiB |
| test_0256.txt | AC | 1903 ms | 6380 KiB |
| test_0257.txt | AC | 1903 ms | 8288 KiB |
| test_0258.txt | AC | 1903 ms | 8304 KiB |
| test_0259.txt | AC | 1903 ms | 7500 KiB |
| test_0260.txt | AC | 1902 ms | 7628 KiB |
| test_0261.txt | AC | 1903 ms | 8040 KiB |
| test_0262.txt | AC | 1902 ms | 6816 KiB |
| test_0263.txt | AC | 1902 ms | 7360 KiB |
| test_0264.txt | AC | 1902 ms | 8500 KiB |
| test_0265.txt | AC | 1903 ms | 8648 KiB |
| test_0266.txt | AC | 1903 ms | 8780 KiB |
| test_0267.txt | AC | 1903 ms | 6584 KiB |
| test_0268.txt | AC | 1902 ms | 7004 KiB |
| test_0269.txt | AC | 1903 ms | 7696 KiB |
| test_0270.txt | AC | 1903 ms | 8380 KiB |
| test_0271.txt | AC | 1903 ms | 7032 KiB |
| test_0272.txt | AC | 1902 ms | 6196 KiB |
| test_0273.txt | AC | 1903 ms | 8424 KiB |
| test_0274.txt | AC | 1903 ms | 7432 KiB |
| test_0275.txt | AC | 1902 ms | 6488 KiB |
| test_0276.txt | AC | 1903 ms | 7984 KiB |
| test_0277.txt | AC | 1903 ms | 8192 KiB |
| test_0278.txt | AC | 1903 ms | 8040 KiB |
| test_0279.txt | AC | 1902 ms | 8800 KiB |
| test_0280.txt | AC | 1903 ms | 7732 KiB |
| test_0281.txt | AC | 1902 ms | 7528 KiB |
| test_0282.txt | AC | 1902 ms | 7112 KiB |
| test_0283.txt | AC | 1904 ms | 8540 KiB |
| test_0284.txt | AC | 1903 ms | 7024 KiB |
| test_0285.txt | AC | 1903 ms | 8824 KiB |
| test_0286.txt | AC | 1903 ms | 7572 KiB |
| test_0287.txt | AC | 1903 ms | 6348 KiB |
| test_0288.txt | AC | 1902 ms | 6916 KiB |
| test_0289.txt | AC | 1903 ms | 6684 KiB |
| test_0290.txt | AC | 1903 ms | 6440 KiB |
| test_0291.txt | AC | 1903 ms | 7288 KiB |
| test_0292.txt | AC | 1903 ms | 6924 KiB |
| test_0293.txt | AC | 1903 ms | 7948 KiB |
| test_0294.txt | AC | 1903 ms | 6552 KiB |
| test_0295.txt | AC | 1903 ms | 6576 KiB |
| test_0296.txt | AC | 1903 ms | 8976 KiB |
| test_0297.txt | AC | 1903 ms | 7972 KiB |
| test_0298.txt | AC | 1903 ms | 8916 KiB |
| test_0299.txt | AC | 1903 ms | 8048 KiB |